PHP如何聚合二维数组
Posted
技术标签:
【中文标题】PHP如何聚合二维数组【英文标题】:PHP how to aggregate 2 dimensional array 【发布时间】:2016-08-24 18:55:56 【问题描述】:我在 php 中有一个二维数组,我需要先聚合其中的数据,然后再使用 PHPExcel 将其保存到 EXCEL 工作表中。我的数据已经按国家排序。每个子数组都有一个国家名称。我想要做的是为每个国家添加“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
)
我知道像array_walk_recursive
这样的PHP 函数可以提供帮助,但我不知道该怎么做。
【问题讨论】:
所以您希望“LIVE”值包含每个国家/地区所有“LIVE”的总和? @ArditMeti 我想为每个国家添加一个总行(子数组),以保存该国家/地区的 LIVE 总数。我将编辑我的帖子以澄清这一点。 你不需要递归遍历。只是一个循环。foreach($arr as $id => $child) $totals[$child['Country']] += $child['Total Live'];
【参考方案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 ;
【讨论】:
是的,只是我已经工作了7个小时:P累了,让我编辑一下 完成任务无事以上是关于PHP如何聚合二维数组的主要内容,如果未能解决你的问题,请参考以下文章
php 如何取二维数组中某个值,并组合成另一个一维数组进行implode