【问题标题】:How to merge Arrays having same keys only and neglect different keys?如何合并仅具有相同键的数组并忽略不同的键?
【发布时间】:2014-06-06 11:50:20
【问题描述】:

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

这是第一个数组:

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()”,但这个显示所有键。 提前致谢。

【问题讨论】:

  • 您的意思是要按索引而不是按键合并,对吗?我从你的例子中看到。因为您的示例中的键不同,但索引 [1] 和 [2] 是相同的。

标签: php arrays multidimensional-array array-merge


【解决方案1】:

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

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

Here's a demo

【讨论】:

    【解决方案2】:

    您可能正在寻找array_intersect_key

    【讨论】:

      【解决方案3】:

      您也可以使用 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
              )
      
      )
      

      【讨论】:

        猜你喜欢
        • 2011-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-29
        • 2014-03-12
        • 1970-01-01
        • 2018-02-12
        相关资源
        最近更新 更多