@po47

Как объединить массив с одинаковыми индексами?

$a /* array (size=1)
  62 => 
    array (size=1)
      0 => int 11 //
*/

$b /* array (size=2)
  49 => 
    array (size=3)
      0 => int 1
      1 => int 2
      2 => int 3
  62 => 
    array (size=1)
      0 => int 22 //
*/

ArrayHelper::merge($a, $b) /* возвращает array (size=3)
  62 => 
    array (size=1)
      0 => int 11 //
  49 => 
    array (size=3)
      0 => int 1
      1 => int 2
      2 => int 3
  63 => 
    array (size=1)
      0 => int 22 //
*/


А нужен массив в виде:
($a, $b) /* array (size=2)
  62 => 
    array (size=2)
      0 => int 11 //
      1 => int 22 //
  49 => 
    array (size=3)
      0 => int 1
      1 => int 2
      2 => int 3
  */


При использовании функций php ( array_merge_recursive, array_merge) индексы перезаписываются на 1, 2, 3
из документации по array_merge_recursive:
Если входные массивы имеют одинаковые строковые ключи, то значения этих ключей сливаются в массив, и это делается рекурсивно, так что если одно из значений является массивом, то функция сливает его с соответствующим значением в другом массиве. Однако, если массивы имеют одинаковые числовые ключи, каждое последующее значение не заменит исходное значение, а будет добавлено в конец массива.
  • Вопрос задан
  • 332 просмотра
Пригласить эксперта
Ответы на вопрос 1
@colourfull
$a = [
62 =>[11],
102 =>[654]
];

$b = [
49 => [1,2,3],
62 => [22]
];

foreach($b as $key=>&$value){
foreach( $a as $key2=>$value2){
if($key === $key2){
$value = array_merge($value,$value2);
}
}
unset($value);
}

foreach(array_diff_key($a, $b) as $key=>$value){
$b[$key] = $value;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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