php - 如何在 PHP 中合并 2 个带有数字索引的数组并替换值?

标签 php arrays merge

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

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

最佳答案

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 的重复项

关于php - 如何在 PHP 中合并 2 个带有数字索引的数组并替换值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15209475/

相关文章:

php - Perl/MySQL 'Host is not allowed' 和 ' failed: Client does not support authentication protocol requested by server' 错误?

javascript - 如何在截止日期过后禁用复选框

version-control - 版本控制以及与自动生成的 xml 设计器文件的频繁 merge 冲突

php - 在 add_post_meta 中存储 Json 值

python - numpy 数组到置换矩阵

用户定义类型的 Java 数组

python - 在Python中连接来自connection.recv()的数据包

Linux 合并文件 awk 命令

python - 将两个数据框与原点合并

php - 在 CakePHP 中查找 ('count' ) 有多贵?