【问题标题】:How to merge 2 arrays with numeric indices and have values replaced in PHP?如何将 2 个数组与数字索引合并并在 PHP 中替换值?
【发布时间】:2013-03-04 19:27:44
【问题描述】:

我有 2 个数组嵌套到来自外部源的 4 或 5 个级别(因此,如果可能,我不能也不想手动更改结构)。我已经简化了下面的问题,但请记住,这些结构超出了我的控制范围,因此我需要一个通用的解决方案。

$x = array (
  'one' => 
  array (
    'two' => 2,
    'three' => 
    array (
      0 => 3,
    ),
  ),
);

$y = array (
  'one' => 
  array (
    'three' => 
    array (
      0 => 3,
    ),
    'four' => 4,
    'five' => 5,
  ),
  'six' => 6
);

我想合并这些并得到:

array (
  'one' => 
  array (
    'two' => 2,
    'three' => 
    array (
      0 => 3,
    ),
    'four' => 4,
    'five' => 5,
  ),
  'six' => 6
)

我已经尝试了以下所有方法,但没有一个完全符合上述要求:

var_dump($x+$y);
var_dump(array_merge($x,$y));
var_dump(array_merge_recursive($x,$y));

var_dump($y+$x);
var_dump(array_merge($y,$x));
var_dump(array_merge_recursive($y,$x));

所以,我想我需要一些自定义代码来进行合并。那会是什么?保持通用和简单。

【问题讨论】:

    标签: php arrays merge


    【解决方案1】:
    function array_merge_recursive_unique($array1, $array2) {
      if (empty($array1)) return $array2; //optimize the base case
    
      foreach ($array2 as $key => $value) {
        if (is_array($value) && is_array(@$array1[$key])) {
          $value = array_merge_recursive_unique($array1[$key], $value);
        }
        $array1[$key] = $value;
      }
      return $array1;
    }
    

    发帖前请先搜索。这是merge-2-arrays-with-no-duplicated-keys的副本

    【讨论】:

      【解决方案2】:

      使用 Zend\StdLib\ArrayUtils::merge(),此方法用于合并 ZF2 中的配置数组并做你想做的事情。

      见: https://github.com/zendframework/zf2/blob/master/library/Zend/Stdlib/ArrayUtils.php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-11
        • 1970-01-01
        • 2016-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多