笛卡尔积
递归笛卡尔积算法
支持多数组组合
/**
* 递归笛卡尔积
* @param $value_list = array:2 [
60008 => array:5 [
10010 => array:5 [
"id" => 32
"attr_type" => 60008
"attr_name" => "体系VIP"
"menu" => "10010"
"created_at" => "2020-05-07 17:58:19"
]
10020 => array:5 [
"id" => 33
"attr_type" => 60008
"attr_name" => "体系普通"
"menu" => "10020"
"created_at" => "2020-05-07 17:58:37"
]
10030 => array:5 [
"id" => 34
"attr_type" => 60008
"attr_name" => "项目会员"
"menu" => "10030"
"created_at" => "2020-05-07 17:58:51"
]
10040 => array:5 [
"id" => 35
"attr_type" => 60008
"attr_name" => "云会员"
"menu" => "10040"
"created_at" => "2020-05-07 17:59:06"
]
10090 => array:5 [
"id" => 36
"attr_type" => 60008
"attr_name" => "非会员"
"menu" => "10090"
"created_at" => "2020-05-07 17:59:24"
]
]
60009 => array:4 [
1 => array:5 [
"id" => 37
"attr_type" => 60009
"attr_name" => "0.5年(半年)"
"menu" => "1"
"created_at" => "2020-05-07 18:07:55"
]
2 => array:5 [
"id" => 38
"attr_type" => 60009
"attr_name" => "1年(普通一年)"
"menu" => "2"
"created_at" => "2020-05-07 18:08:11"
]
3 => array:5 [
"id" => 39
"attr_type" => 60009
"attr_name" => "2.5年 (买两年送半年)"
"menu" => "3"
"created_at" => "2020-05-07 18:08:40"
]
4 => array:5 [
"id" => 40
"attr_type" => 60009
"attr_name" => "4年 (买三送一)"
"menu" => "4"
"created_at" => "2020-05-07 18:08:54"
]
]
]
* @param $data =[]
* @return array
*/
public function cartesian($value_list,$data){
//去除第一个元素
$first = array_shift($value_list);
//判断是否是第一次进行拼接
if (count($data)>1){
foreach ($data as $key=>$value){
foreach ($first as $ke=>$va){
$data2[] = $value.','.$va['id'];
}
}
}else{
foreach ($first as $key=>$value){
$data2[] = $value['id'];
}
}
//递归进行拼接
if(count($value_list) > 0){
$data2 = $this->cartesian($value_list,$data2);
}
//返回最终笛卡尔积
return $data2??[];
}
组合的结果集为: