Объединить два массива с одним и тем же ключом, но на разной глубине?

#php #arrays #merge

#php #массивы #объединить

Вопрос:

 $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:

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

Обратите внимание, что при этом используется синтаксис PHP 5.3 .

Комментарии:

1. Тогда вы можете просто переписать это как обычное объявление функции или даже использовать create_function . См php.net/manual/en /… и php.net/array_walk_recursive