Как перегруппировать массив, переместив ключи вложенных массивов на уровень выше?

Есть массив массивов, который обрабатывается в цикле foreach:

$lc = [];

    foreach ($outputarr as $uy => $q) {
    
    
        $sq = $lc + $q;
    
    
    }

В результате каждую итерацию в $q поступает массив с одной и той же структурой. Вот один из этих массивов (результат вардампления $q на одной итерации):

array(1) {
  [15]=>
  array(1) {
    [2017]=>
    string(2) "10"
  }
}

объединить все массивы из работы foreach, попадающие в $q, но с таким расчетом, чтобы поверх не добавились новые ключи. Нужен такой результат:

array{

  [15]=>
  array(1) {
    [2017]=>
    string(2) "10"
  }
}

 [16]=>
  array(1) {
    [2017]=>
    string(2) "10"
  }
}
}

Код в самом первом отрывке кода примере не срабатывает, почему-то массивы не склаыдваются..

$lc = array();

    foreach ($outputarr as $uy => $q) {
    
    
        $sq = array_merge($lc, $q);
    
    
    }

Так тоже не получается, а если сделать так:

  $lc = array();
        
            foreach ($outputarr as $uy => $q) {
            
            
                $sq[] = $q;
            
            
            }

То $sq наполняется массивами, но добавляется верхний уровень ключей [0], [1], [2] - то, чего надо избежать...

Не подскажете, кто разбирается, что сделать? Заранее спасибо огромнейшее!


Ответы (1 шт):

Автор решения: UrfinJuezz

Не уверен правильно ли я вас понял, но если правильно, то этот код:

<?php
$outputarr = [
    [
        15=>[
            2017 => 10,
        ],
    ],
    [
        16=>[
            2017 => 10,
        ],
    ],
    [
        16=>[
            2017 => 10,
        ],
    ],
];

$result = [];
foreach ($outputarr as $arr){
    $result += $arr;
}

print_r($result);
?>

выдает именно то что вам нужно:

Array
(
    [15] => Array
        (
            [2017] => 10
        )

    [16] => Array
        (
            [2017] => 10
        )

)

В вашем коде проблема в именовании переменной. Вместо того чтобы складывать предыдущий результат с очередным элементом вы на каждой итерации присваиваете $sq сумму пустого массива и текущего элемента и перезаписываете этим действием предыдущий результат.

→ Ссылка