Как перегруппировать массив, переместив ключи вложенных массивов на уровень выше?
Есть массив массивов, который обрабатывается в цикле 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 шт):
Не уверен правильно ли я вас понял, но если правильно, то этот код:
<?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 сумму пустого массива и текущего элемента и перезаписываете этим действием предыдущий результат.