在進行電商的業務場景開發過程中,商品的屬性需要使用到排列組合的演算法去實現商品的sku屬性
而對於排列組合演算法可使用遞迴的方式解決:
//以$arr陣列為例:
$arr = [['a','b','c'],['a','b'],['a','b','c','d','e']];
需將陣列內的各個子陣列裡的值排列組合如aaa,aab,aac,aad,aae,aba
這樣的返回值
遞迴需要滿足的三個條件
- 一個問題的解可以分解為幾個子問題的解
- 這個問題與分解之後的子問題,除了資料規模不同,求解思路完全一樣
- 存在遞迴終止條件
可以將問題拆分為n-1個雙重迴圈,如先將前兩組陣列遍歷組合成aa,ab,ba,bb,ca,cb
,再將得到的陣列與下一陣列迴圈遍歷就可得到最終排列組合的結果
實現程式碼如下:
$arr = [['a','b','c'],['a','b'],['a','b','c','d','e']];
function recursiveArray($arr,$i=0,$data=[]){
$j=$i+1;
if(count($arr)==1){
return $arr;
}else{
if($j>=count($arr)){
return $data;
}
if(!$data){
$z=0;
foreach($arr[$i] as $k1=>$v1){
foreach($arr[$j] as $k2=>$v2){
$data[$z]=$v1.$v2;
$z++;
}
}
$i++;
return $this->recursiveArray($arr,$i,$data);
}else{
$z=0;
foreach($data as $k1=>$v1){
foreach($arr[$j] as $k2=>$v2){
$data[$z]=$v1.$v2;
$z++;
}
}
$i++;
return $this->recursiveArray($arr,$i,$data);
}
}
}
以上
本作品採用《CC 協議》,轉載必須註明作者和本文連結