Подтвердить что ты не робот

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()...

4b9b3361

Ответ 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" в вашем примере)? Сохранять слияние рекурсивно или нет?