PHP 求多个数组的笛卡尔积,适用于求商品规格组合 【深度优先搜索】【原创】

$arr = [
['黑','白','红','绿'],
['大','小'],
['A','B','C','D']
];
$book = [[0,0,0,0], [0,0], [0,0,0,0]];
$res = [];
$pos = 0;
function dfs($arr,$step,&$res,$book,&$pos){
if($step == count($arr)) { # 输出中间路径
$pos = $pos + 1;
for($i = 0; $i < count($book); $i++){
for($j = 0; $j < count($book[$i]); $j++){
if($book[$i][$j] == 1) $res[$pos][] = $arr[$i][$j];
}
}
return;
}
for($i = 0; $i < count($arr[$step]); $i++){
if($book[$step][$i] == 0){
$book[$step][$i] = 1; # 标记走过
dfs($arr,$step + 1, $res,$book,$pos);
$book[$step][$i] = 0; # 标记回溯
}
}
}
dfs($arr,0,$res,$book,$pos);
print_r($res);

posted on 2021-01-08 14:50  刷哥  阅读(204)  评论(0编辑  收藏  举报

导航