//按照相同键值分组合并数组
$arr = [];//定义一个空数组
foreach ($date_info as $key => &$value) {//$date_info为需要合并的数组一
foreach ($setting as $k => $item) {//$setting为需要合并的数组二
if ($value['start'] === $item['start']) {//start为相同的键值字段
$temp = array_merge($value,$item);//合并
$arr[] = $temp;//复制给新的数组
}
}
}
$temp_ids = array_column($arr, 'start');//获取新数组中的start字段 生成仅含有start字段的数组
//判断是否每个数组中都含有start字段
$sub_1 = array_filter($date_info,function($o) use ($temp_ids){//过滤数组一中的元素 start字段
if (!in_array($o['start'], $temp_ids)) {//判断数组一中的start字段是否在数组$temp_ids中
return true;
}
});
$sub_2 = array_filter($setting,function($i) use ($temp_ids){//过滤数组二中的元素 start字段
if (!in_array($i['start'], $temp_ids)) {//判断数组二中的start字段是否在数组$temp_ids中
return true;
}
});
$data= array_merge_recursive($arr,$sub_1,$sub_2); //合并生成新的数组
1.array_merge
array_merge(array1,array2,array3…):把一个或多个数组合并为一个数组
注释:如果两个或更多个数组元素有相同的键名,则最后的元素会覆盖其他元素
2.array_column
array_column(array,column_key,index_key):返回输入数组中某个单一列的值
3.array_filter
array_filter(array,callbackfunction):用回调函数过滤数组中的值
4.in_array
in_array(search,array,type):搜索数组中是否存在指定的值
5.array_merge_recursive
array_merge_recursive(array1,array2,array3…):把一个或多个数组合并为一个数组
该函数与 array_merge() 函数的区别在于处理两个或更多个数组元素有相同的键名时。array_merge_recursive() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组