假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}
在做商城,我们会遇到选择商品规格不通的组合,这种组合数学上叫做笛卡尔乘积,我们用PHP来实现笛卡尔乘积。
实现思路
1、先计算第一个集合和第二个集合的笛卡尔积,把结果保存为一个新集合。
2、然后再用新集合与下一个集合计算笛卡尔积,依此循环直到与最后一个集合计算笛卡尔积。
/**
* 计算多个集合的笛卡尔积
* @param Array $sets 集合数组
* @return Array
*/
function CartesianProduct($sets){
if(count($sets)<=1){
$result = $sets[0];
}else {
// 保存结果
$result = array();
// 循环遍历集合数据
for ($i = 0, $count = count($sets); $i < $count - 1; $i++) {
// 初始化
if ($i == 0) {
$result = $sets[$i];
}
// 保存临时数据
$tmp = array();
// 结果与下一个集合计算笛卡尔积
foreach ($result as $res) {
foreach ($sets[$i + 1] as $set) {
$tmp[] = $res . '-' . $set;
}
}
// 将笛卡尔积写入结果
$result = $tmp;
}
}
return $result;
}
// 定义集合
$sets = array(
array('亚麻布','纯棉'),
array('蓝色','绿色'),
array('XL','2XL','3XL')
);
$result = CartesianProduct($sets);
print_r($result);
Array
(
[0] => 亚麻布-蓝色-XL
[1] => 亚麻布-蓝色-2XL
[2] => 亚麻布-蓝色-3XL
[3] => 亚麻布-绿色-XL
[4] => 亚麻布-绿色-2XL
[5] => 亚麻布-绿色-3XL
[6] => 纯棉-蓝色-XL
[7] => 纯棉-蓝色-2XL
[8] => 纯棉-蓝色-3XL
[9] => 纯棉-绿色-XL
[10] => 纯棉-绿色-2XL
[11] => 纯棉-绿色-3XL
)
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对北漂的程序猿的支持。
好厉害