PHP 求多个数组的笛卡尔积,适用于求商品规格组合【原创】
$a = ['黑','白','红','绿'];
$b = ['大','小'];
$c = ['A','B','C','D'];
$count_a = count($a);
$count_b = count($b);
$count_c = count($c);
$total = $count_a * $count_b * $count_c; # 一共有多少种情况
$arr = [];
for($i = 0; $i < $total; $i++){
$pos_c = $i % $count_c; # 得到 当前 $c 下标
$res = floor($i / $count_c);
$pos_b = $res % $count_b; # 得到 当前 $b 下标
$res = floor($res / $count_b);
$pos_a = $res % $count_a; #得到 当前 $a 下标
# $arr[$i] = [$a[$pos_a],$b[$pos_b],$c[$pos_c]];
echo $a[$pos_a] . ','. $b[$pos_b] . ',' . $c[$pos_c] . "\n";
}
运行结果如下
D:\phpstudy_pro\Extensions\php\php7.3.4nts\php.exe D:\Brush\2020-01-07\01.php
黑,大,A
黑,大,B
黑,大,C
黑,大,D
黑,小,A
黑,小,B
黑,小,C
黑,小,D
白,大,A
白,大,B
白,大,C
白,大,D
白,小,A
白,小,B
白,小,C
白,小,D
红,大,A
红,大,B
红,大,C
红,大,D
红,小,A
红,小,B
红,小,C
红,小,D
绿,大,A
绿,大,B
绿,大,C
绿,大,D
绿,小,A
绿,小,B
绿,小,C
绿,小,D
进程已结束,退出代码0