PHP 求多个数组的笛卡尔积,适用于求商品规格组合 【递归思想, 类似广度优先搜索】【原创】
$arr = [
['黑', '白', '红', '绿'],
['大', '小'],
['A', 'B', 'C', 'D']
];
#思想就是循环上一次已经算出的集合 * 接下来要参与计算的一组属性
function brush($res = [], $arr = [])
{
if (empty($res)) $res = (array)array_shift($arr);
if (empty($arr)) return $res;
$current = array_shift($arr); # 接下来要参与计算的一组属性
$last = [];
foreach ($res as $row => $row_val) { # 循环上一次已经算出的集合
foreach ($current as $col => $col_val) {
$last[] = $row_val . ',' . $col_val;
}
}
return brush($last,$arr); # 递归处理, 直到$arr滚到最后一组属性
}
var_dump(brush([],$arr));