方案一
/**
* 一对一关联数组合并
*
* @param $arr1
* @param $arr2
* @param string $arr1_key
* @param string $arr2_key
*
* @return mixed
*/
private static function peerMerge($arr1, $arr2, $arr1_key = 'pid', $arr2_key = 'id')
{
//父级
foreach ($arr1 as $i => $item1) {
//子级
foreach ($arr2 as $j => $item2) {
//父级与子级匹配
if ($item1[$arr1_key] == $item2[$arr2_key]) {
//去除子级关联ID
unset($item2[$arr2_key]);
$arr1[$i] = array_merge($item1, $item2);
//匹配完成
continue;
}
}
// unset($arr1[$i][$arr1_key]);
}
return $arr1;
}
方案二
/**
* 一对一关联数组合并
*
* @param $arr1
* @param $arr2
* @param string $arr1_key
* @param string $arr2_key
*
* @return mixed
*/
private static function peerMerge2($arr1, $arr2, $arr1_key = 'pid', $arr2_key = 'id')
{
//获取子级关联的数组id列
$arr2_key_index = array_column($arr2, $arr2_key);
//父级
foreach ($arr1 as $i => $item1) {
//找到第二个数组的索引
$arr2_item_key = array_search($item1[$arr1_key], $arr2_key_index);
//去除子级关联ID
unset($arr2[$arr2_item_key][$arr2_key]);
//合并数组
$arr1[$i] = array_merge($arr1[$i], $arr2[$arr2_item_key]);
}
return $arr1;
}