Доброго времени суток.
Сегодня отлавливал баг, и обнаружил неприятную особенность работы функции 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 не сохранил индекс массива, а просто добавил в конец.
Если в качестве ключей использовать строковые значения, то код работает, как и ожидается (ключи сохраняются).