两个二维数组 关联一对一合并成一个数组 两种解法

方案一

    /**
     * 一对一关联数组合并
     *
     * @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;

    }

你可能感兴趣的:(两个二维数组 关联一对一合并成一个数组 两种解法)