Minifets
@Minifets
Hello world!!!

Баг в PHP или фича (array_merge_recursive)?

Доброго времени суток.

Сегодня отлавливал баг, и обнаружил неприятную особенность работы функции array_merge_recursive с числовыми индексами.

Пример:

$test1 = [
    'test' => [
        5 => 'test5'
    ]
];

$test2 = [
    'test' => [
        10 => 'test10'
    ]
];

var_dump(array_merge_recursive($test1, $test2));


Результат:

array(1) {
  'test' =>
  array(2) {
    [5] =>
    string(5) "test5"
    [6] =>
    string(6) "test10"
  }
}


т.е. php не сохранил индекс массива, а просто добавил в конец.
Если в качестве ключей использовать строковые значения, то код работает, как и ожидается (ключи сохраняются).
  • Вопрос задан
  • 213 просмотров
Решения вопроса 1
kimono
@kimono
Web developer
А документацию не читали?
Функция array_merge_recursive() сливает элементы двух или более массивов таким образом, что значения одного массива присоединяются в конец другого. Возвращает результирующий массив.

Если входные массивы имеют одинаковые строковые ключи, то значения этих ключей сливаются в массив, и это делается рекурсивно, так что если одно из значений является массивом, то функция сливает его с соответствующим значением в другом массиве. Однако, если массивы имеют одинаковые числовые ключи, каждое последующее значение не заменит исходное значение, а будет добавлено в конец массива.


У первого массива последний ключ - 5, соответственно следующий - 6.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы