php 按照相同键值分组合并数组

//按照相同键值分组合并数组
$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() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组

    原文作者:长着狒狒毛的程序媛
    原文地址: https://blog.csdn.net/qq_41515189/article/details/99683524
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞