2

我有 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));

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

4

2 回答 2

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 的副本

于 2013-03-04T19:36:25.097 回答
1

使用 Zend\StdLib\ArrayUtils::merge(),此方法用于合并 ZF2 中的配置数组并按照您的意愿进行操作。

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

于 2013-03-04T19:37:24.620 回答