PHP как собрать 2-мерный массив

У меня есть двумерный массив в PHP, мне нужно объединить данные внутри него, прежде чем сохранять их на листе EXCEL с помощью PHPExcel. Мои данные уже отсортированы по стране. У каждого подмассива есть название страны. я хочу добавить общее количество полей «LIVE» для каждой страны. Моя таблица выглядит так:

[
[314] => Array
(
[Country] => France
[provider] => HIberica
[status] => inactive
[# per status] => 1
[Live] => 0
)

[315] => Array
(
[Country] => France
[provider] => HIberica
[status] => active
[# per status] => 4223
[Live] => 4171
)

[316] => Array
(
[Country] => United States
[provider] => HarperC
[status] => pending
[# per status] => 69
[Live] => 0
)

[317] => Array
(
[Country] => United States
[provider] => HC
[status] => inactive
[# per status] => 2582
[Live] => 0
)

[318] => Array
(
[Country] => United States
[provider] => HC
[status] => active
[# per status] => 16217
[Live] => 16217
)

[319] => Array
(
[Country] => United States
[provider] => H UK
[status] => active
[# per status] => 70
[Live] => 70
)

]

Конечный результат, который мне нужен, — это добавление подмассива для каждой страны для хранения итогового поля LIVE, вот так:

 [320] => Array
(
[Country] => United States
[provider] => All Providers
[status] => active
[# per status] => NULL
[Total Live] => 7000 # the total per country goes here
)

Я знаю, что PHP работает как array_walk_recursive может помочь, но я не знаю, как это сделать.

1

Решение

Зациклите ваш массив и создайте временный результат, указав Country в качестве ключа и добавив Live. Затем просто объедините значения с исходным массивом:

foreach($array as $sub) {
if(!isset($result[$sub['Country']])) {
$result[$sub['Country']] = array('Country' => $sub['Country'],
'Total Live' => $sub['Live'],
'provider' => 'All Providers',
'status' => 'active',
'# per status' => 'NULL');
} else {
$result[$sub['Country']]['Total Live'] += $sub['Live'];
}
}

$array = array_merge($array, array_values($result));
2

Другие решения

Сначала найдите все жизни в каждой стране, затем создайте этот временный массив, как вы хотите, и просто добавьте его в свой массив.

$subArrOfLive = [];
foreach($YOUR_ARR as $val){
$currCountry = $val["Country"];
$currLive    = $val["Live"];

if(!isset($subArrOfLive[$currCountry])) {
$subArrOfLive[$currCountry] = $currLive;
}else{
$subArrOfLive[$currCountry] += $currLive;
}

}

foreach($subArrOfLive as $key => $val){
$temp = array(
"Country" => $key,
"provider" => "All Providers",
"status" => "active",
"# per status" => NULL,
"Total Live" => $val
);
$YOUR_ARR[] = $temp ;
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector