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如何将二维数组添加到数据库中,如何遍历

PHP二维数组如何去掉重复值

php 如何取二维数组中某个值,并组合成另一个一维数组进行implode

php中如何删除二维数组中含有指定元素的所有一维数组?要求如下:

php 二维数组合并 用逗号分开

PHP如何改变二维数组键标???