如何合并只有相同键的数组并忽略不同的键?

时间:2014-06-06 11:50:21

标签: php arrays multidimensional-array array-merge

我是PHP新手,喜欢学习它。 我想合并两个或多个只有相同键的数组。并且忽略其键不在两个数组中的数组。像

这是First Array:

Array
(
[1] => Array
    (
        [111] => 36265
    )

[2] => Array
    (
        [222] => 36265
    )

[3] => Array
    (
        [333] => 36265
    )
)

和第二个数组:

Array
(
[1] => Array
    (
        [444] => 36265
    )

[2] => Array
    (
        [555] => 36265
    )

[4] => Array
    (
        [666] => 36265
    )
)

我希望我的结果如下:

Array
(
[1] => Array
    (
        [111] => 36265
        [444] => 36265
    )

[2] => Array
    (
        [222] => 36265
        [555] => 36265
    )

)

用键[3]&忽略其余数组[4] ....

所以请有人告诉我如何获得这个。我尝试“array_merge_recursive()”,但这个显示所有键。 提前谢谢。

3 个答案:

答案 0 :(得分:1)

你必须遍历其中一个数组,检查另一个数组中是否存在当前键,如果存在,则合并它们,例如:

$output = array();
foreach ($array1 as $key => $value) {
  if (array_key_exists($key, $array2)) {
    $output[$key] = $value + $array2[$key];
  } 
}

Here's a demo

答案 1 :(得分:0)

您可能正在寻找array_intersect_key

答案 2 :(得分:0)

你也可以使用foreacah循环并创建一个新的循环。在此循环中,您可以使用其中一个数组键来匹配它们。考虑这个例子:

 $array1 = array( 1 => array(111 => 36265), 2 => array(222 => 36265), 3 => array(333 => 36265), ); $array2 = array( 1 => array(444 => 36265), 2 => array(555 => 36265), 4 => array(666 => 36265), );

$new_array = array();
foreach($array1 as $key => $value) {
    if(isset($array2[$key])) {
        $new_array[$key][key($array1[$key])] = reset($array1[$key]);
        $new_array[$key][key($array2[$key])] = reset($array2[$key]);
    }
}

echo '<pre>';
print_r($new_array);
echo '</pre>';

应该产生这样的东西:

Array
(
    [1] => Array
        (
            [111] => 36265
            [444] => 36265
        )

    [2] => Array
        (
            [222] => 36265
            [555] => 36265
        )

)