下面小編就為大家帶來一篇淺談PHP的排列組合(如輸入a,b,c 輸出他們的全部組合)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
執行個體如下:
<?php/*分治法——直接選擇比如說a b c首先將a之後的字元依次與a進行交換1 b,a,c2 c,b,a注意這裡少了一個未經處理資料 a,b,c。需要把未經處理資料也算如排列中3 a,b,c然後把字元移到第二個位置,將第二個位置之後的數分別與第二個位置的數進行交換1 b,a,c ===> 11 b,c,a2 c,b,a ===> 21 c,a,b3 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; }}