實例如下:
<?php /*分治法——直接選擇 比如說a b c 首先將a之后的字符依次與a進行交換 1 b,a,c 2 c,b,a 注意這里少了一個原始數據 a,b,c。需要把原始數據也算如排列中 3 a,b,c 然后把字符移到第二個位置,將第二個位置之后的數分別與第二個位置的數進行交換 1 b,a,c ===> 11 b,c,a 2 c,b,a ===> 21 c,a,b 3 a,b,c ===> 31 a,c,b **/ function zuhe($arr,$begin){ if(!is_array($arr)) return ; $N = count($arr); if($begin == $N-1 || $begin >$N || $begin <0) return ; if($begin == 0){ print_r($arr);//輸出原始數據 echo '</br>'; } //循環將初始值與第i個值交換后進行組合 for($i = $begin;$i < $N;$i++){ $t = $arr[$begin]; $arr[$begin] = $arr[$i]; $arr[$i] = $t; if($i!==$begin){//i==begin時的數已經輸出過 print_r($arr); echo '</br>'; } zuhe($arr,$begin+1); $t = $arr[$begin]; $arr[$begin] = $arr[$i]; $arr[$i] = $t; } } $arr = array('a','b','c','d'); //zuhe($arr,0); /*分治法——直接插入 初始時從0個元素開始,輸出初始序列,為組合的一個序列 當在來一個元素時只需將該元素放在該元素之前的元素組的不同的位置即組成了不同的排列 如已有元素組為a,b.新元素為c,把c分別與a,b進行交換即可(a,c,b);(c,b,a),在現有的排列上在新增元素 重復執行以上步驟 */ function zuhe2($arr,$begin){ if($begin==0) { print_r($arr); echo "</br>"; //zuhe2($arr,$begin+1); } if($begin >= count($arr)) return ; zuhe2($arr,$begin+1);//begin時的排列上一次已產生,直接新增元素 for($i = $begin-1;$i>=0;$i--){ $t = $arr[$begin]; $arr[$begin] = $arr[$i]; $arr[$i] = $t; print_r($arr); echo "</br>"; zuhe2($arr,$begin +1); $t = $arr[$begin]; $arr[$begin] = $arr[$i]; $arr[$i] = $t; } }
以上這篇淺談PHP的排列組合(如輸入a,b,c 輸出他們的全部組合)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持。
【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。