将关联数组与多个键合并

时间:2017-07-20 09:50:28

标签: php arrays merge

如何将关联数组与多个键合并。

下面有两个数组: -

Array1 = Array
(
    [294] => Array
        (
            [2017] => Array
                (
                    [6] => Underperforming
                )

        )

    [236] => Array
        (
            [2017] => Array
                (
                    [6] => High
                )

        )
);
Array2 = Array
(
    [294] => Array
        (
            [2017] => Array
                (
                    [5] => Steady
                )

        )

    [236] => Array
        (
            [2017] => Array
                (
                    [5] => Low
                )

        )
);

我希望这些数组在PHP中合并,需要输出如下所示, 期待输出数组:

Array (
    [294] => Array
        (
            [2017] => Array
                (
                    [6] => Underperforming
                    [5] => Steady

                )

        )

    [236] => Array
        (
            [2017] => Array
                (
                    [6] => High
                    [5] => Low 
                )

        )
);

数组键不会更改,只会更改值。两个数组都具有相同的数组结构。

2 个答案:

答案 0 :(得分:1)

你可以这样做: -

$final_array = array();

foreach($Array1 as $key=>$val){
     if(is_array($val) && is_array($Array2[$key])){
         if(array_keys($val)[0] == array_keys($Array2[$key])[0]){
            $final_array[$key][array_keys($val)[0]] = $Array1[$key][array_keys($Array1[$key])[0]]+$Array2[$key][array_keys($Array2[$key])[0]];
         }
     }

}

print_r($final_array);

输出: - https://eval.in/834913

更好的方法: -

$final_array = array();

if(count($Array1) >= count($Array2)){

    foreach($Array1 as $key=>$val){
         if(is_array($val) && is_array($Array2[$key])){
                $final_array[$key][array_keys($val)[0]] = $Array1[$key][array_keys($Array1[$key])[0]]+$Array2[$key][array_keys($Array2[$key])[0]];
         }else{
            $final_array[$key] = $val;
         }
    }
}
if(count($Array1) < count($Array2)){

    foreach($Array2 as $key=>$val){
         if(is_array($val) && is_array($Array1[$key])){
                $final_array[$key][array_keys($val)[0]] = $Array1[$key][array_keys($Array1[$key])[0]]+$Array2[$key][array_keys($Array2[$key])[0]];
         }else{
            $final_array[$key] = $val;
         }
    }
}

print_r($final_array);

输出: - https://eval.in/835143

答案 1 :(得分:0)

对于递归合并,php有array_merge_recursive()函数,但它在你的情况下不起作用(因为你有数字键)。 所以需要这样的自定义函数(单独比较所有元素):

function multidimensionalMerge(array $mainArray, array $secondArray)
{
    foreach ($secondArray as $k => $v) {
        if (!empty($mainArray[$k])) {
            if (is_array($mainArray[$k]) && is_array($v))
                $mainArray[$k] = multidimensionalMerge($mainArray[$k], $v);
            else
                $mainArray[$k] = $v;
        } else
            $mainArray[$k] = $v;
    }
    return $mainArray;
}
$array3 = multidimensionalMerge($array1, $array2);

示例:https://eval.in/835129