Php array_merge_recursive сохранение цифровых клавиш
Я просто хотел бы объединить
$a = array("59745506"=>array("up" => 0,));
$b = array("59745506"=>array("text" => "jfrj"));
$c = array_merge_recursive_new($a, $b);
результат:
Array
(
[0] => Array
(
[up] => 0
)
[1] => Array
(
[text] => jfrj
)
)
ожидаемый результат:
Array
(
[59745506] => Array
(
[up] => 0
[text] => jfrj
)
)
2-й комментарий в http://www.php.net/manual/en/function.array-merge-recursive.php работает, это лучшее решение для моего случая (где мне нужно объединить массивы с несколькими числовыми ключи и 2 уровня)?
другим способом было бы реализовать его с помощью array_map (function()...
Ответы
Ответ 1
Функция array_replace_recursive()
выглядит так, как вам нужно.
$a = array("59745506" => array("up" => 0,));
$b = array("59745506" => array("text" => "jfrj"));
$c = array_replace_recursive($a, $b);
var_export($c);
// array (
// 59745506 =>
// array (
// 'up' => 0,
// 'text' => 'jfrj',
// ),
// )
Ответ 2
Ваше ожидание терпит неудачу, поскольку ключ $a
и $b
является числовым (!), хотя вы обозначили его как строковый литерал (см. PHP: Массивы → Синтаксис).
Я думаю, есть ли лучшее решение, зависит от того, что вам нужно. Это может быть проще, чем слияние рекурсивно:
1) Вы уверены, что каждое значение внутри массивов $a
и $b
всегда будет массивом снова?
2) Что должно произойти, если эти массивы имеют общий ключ (т.е. если "text"
снова был "up"
в вашем примере)? Сохранять слияние рекурсивно или нет?