【PHP】二维数组数组实现笛卡尔积,即排列组合
PHP二维数组数组实现笛卡尔积,即排列组合:
https://www.jb51.net/article/144708.htm
//计算sku的笛卡儿积 public static function CartesianProduct($category,$type='/') {//$category,二维数组 [['绿色'=>12,'红色'=>13,'蓝色'=>14],['男'=>101,'女'=>89],['L'=>2011,'M'=>299]] $arr1 = []; $result = array_shift($category); while ($arr2 = array_shift($category)) { $arr1 = $result; $result = []; foreach ($arr1 as $k1=>$v1) { foreach ($arr2 as $k2=>$v2) { $result[$k1.'#'.$k2] = $v1.$type.$v2; } } } return $result; }
function cartesian($arr,$str = array()){
//去除第一个元素
$first = array_shift($arr);
//判断是否是第一次进行拼接
if(count($str) > 1) {
foreach ($str as $k => $val) {
foreach ($first as $key => $value) {
//最终实现的格式 1,3,76
//可根据具体需求进行变更
$str2[] = $val.','.$value;
}
}
}else{
foreach ($first as $key => $value) {
//最终实现的格式 1,3,76
//可根据具体需求进行变更
$str2[] = $value;
}
}
//递归进行拼接
if(count($arr) > 0){
$str2 = cartesian($arr,$str2);
}
//返回最终笛卡尔积
return $str2;
}