Demo
/**
* 计算多个集合的笛卡尔积
* @param Array $goods 集合
* @return Array
*/
public function CartesianProduct($goods)
{
$returnData = [];
for ($i=0; $i < count($goods)-1 ; $i++) {
// 初始化
if($i == 0)
{
$returnData = $goods[$i];
}
$tempArray = []; // 临时数组
foreach ($returnData as $val) {
foreach ($goods[$i+1] as $v) {
$tempArray[] = $val.'+'.$v;
}
}
//重新赋值
$returnData = $tempArray;
}
return $returnData;
}
Demo
$goods = [
['白色','黑色','红色'],
['39','40','41','42','43'],
['普通款','加绒款'],
['男款','女款']
];
$result = $this->CartesianProduct($goods);
print_r($result);
结果
Array
(
[0] => 白色+39+普通款+男款
[1] => 白色+39+普通款+女款
[2] => 白色+39+加绒款+男款
[3] => 白色+39+加绒款+女款
[4] => 白色+40+普通款+男款
[5] => 白色+40+普通款+女款
[6] => 白色+40+加绒款+男款
[7] => 白色+40+加绒款+女款
[8] => 白色+41+普通款+男款
[9] => 白色+41+普通款+女款
[10] => 白色+41+加绒款+男款
[11] => 白色+41+加绒款+女款
[12] => 白色+42+普通款+男款
[13] => 白色+42+普通款+女款
[14] => 白色+42+加绒款+男款
[15] => 白色+42+加绒款+女款
[16] => 白色+43+普通款+男款
[17] => 白色+43+普通款+女款
[18] => 白色+43+加绒款+男款
[19] => 白色+43+加绒款+女款
[20] => 黑色+39+普通款+男款
[21] => 黑色+39+普通款+女款
[22] => 黑色+39+加绒款+男款
[23] => 黑色+39+加绒款+女款
[24] => 黑色+40+普通款+男款
[25] => 黑色+40+普通款+女款
[26] => 黑色+40+加绒款+男款
[27] => 黑色+40+加绒款+女款
[28] => 黑色+41+普通款+男款
[29] => 黑色+41+普通款+女款
[30] => 黑色+41+加绒款+男款
[31] => 黑色+41+加绒款+女款
[32] => 黑色+42+普通款+男款
[33] => 黑色+42+普通款+女款
[34] => 黑色+42+加绒款+男款
[35] => 黑色+42+加绒款+女款
[36] => 黑色+43+普通款+男款
[37] => 黑色+43+普通款+女款
[38] => 黑色+43+加绒款+男款
[39] => 黑色+43+加绒款+女款
[40] => 红色+39+普通款+男款
[41] => 红色+39+普通款+女款
[42] => 红色+39+加绒款+男款
[43] => 红色+39+加绒款+女款
[44] => 红色+40+普通款+男款
[45] => 红色+40+普通款+女款
[46] => 红色+40+加绒款+男款
[47] => 红色+40+加绒款+女款
[48] => 红色+41+普通款+男款
[49] => 红色+41+普通款+女款
[50] => 红色+41+加绒款+男款
[51] => 红色+41+加绒款+女款
[52] => 红色+42+普通款+男款
[53] => 红色+42+普通款+女款
[54] => 红色+42+加绒款+男款
[55] => 红色+42+加绒款+女款
[56] => 红色+43+普通款+男款
[57] => 红色+43+普通款+女款
[58] => 红色+43+加绒款+男款
[59] => 红色+43+加绒款+女款
)