合并具有相同键但具有不同深度的两个数组?

时间:2011-10-19 09:14:07

标签: php arrays merge

$arr = array('one' => array('one_1' => array('one_2' => '12')), 'two', 'three');
$arr2 = array('one_2' => 'twelve');

$merge = array_merge($arr, $arr2);

print '<pre>';
var_dump($merge);
print '</pre>';

给出:

  array(4) {
  ["one"]=>
  array(1) {
    ["one_1"]=>
    array(1) {
      ["one_2"]=>
      string(2) "12"
    }
  }
  [0]=>
  string(3) "two"
  [1]=>
  string(5) "three"
  ["one_2"]=>
  string(6) "twelve"
}

我希望第一个数组中的键one_2的值替换为第二个数组中相同键的值。结果将是:

array(4) {
  ["one"]=>
  array(1) {
    ["one_1"]=>
    array(1) {
      ["one_2"]=>
      string(2) "twelve"
    }
  }
  [0]=>
  string(3) "two"
  [1]=>
  string(5) "three"
}

1 个答案:

答案 0 :(得分:1)

array_walk_recursive($arr, function (&$value, $key, $replacements) {
    if (isset($replacements[$key])) {
        $value = $replacements[$key];
    }
}, $arr2);

请注意,这使用PHP 5.3+语法。