【问题标题】:Sum one value in a multidimensional associative array based on matching two other values (php)基于匹配其他两个值(php)对多维关联数组中的一个值求和
【发布时间】:2015-02-17 22:41:19
【问题描述】:

我有一个关联数组,它本质上是静态虚拟数据,用于代表数据库的模型。我正在尝试复制 GROUPBY YEAR 和 TitleText 在 MySQL 中所做的事情,我可以让它在一个字段上工作 - TitleText 或 YEAR 使用 array_reduce 但我不知道如何在两个字段上一起做。我需要为每个 YEAR 和 TitleText 组合加上一行来汇总单位。这是数组:

$monthly_sales = [
        [
        'XML_KEY' => '9992', 
        'MONTH' => get_relative_date(7)["Month"], 
        'YEAR' => get_relative_date(7)["Year"], 
        'TitleText' => '1984', 
        'units' => 15 
        ], [ 
        'XML_KEY' => '9990', 
        'MONTH' => get_relative_date(7)["Month"], 
        'YEAR' => get_relative_date(7)["Year"],
        'TitleText' => 'Animal Farm', 
        'units' => 7 
        ], [ 
        'XML_KEY' => '9991', 
        'MONTH' => get_relative_date(7)["Month"], 
        'YEAR' => get_relative_date(7)["Year"],
        'TitleText' => 'Keep the Aspidistra Flying', 
        'units' => 5 
        ], [ 
        'XML_KEY' => '9990', 
        'MONTH' => get_relative_date(6)["Month"], 
        'YEAR' => get_relative_date(6)["Year"],
        'TitleText' => 'Animal Farm', 
        'units' => 6 
        ], [ 
        'XML_KEY' => '9991', 
        'MONTH' => get_relative_date(6)["Month"], 
        'YEAR' => get_relative_date(6)["Year"],
        'TitleText' => 
        'Keep the Aspidistra Flying', 
        'units' => 6 
        ], [ 
        'XML_KEY' => '9992', 
        'MONTH' => get_relative_date(6)["Month"],
        'YEAR' => get_relative_date(6)["Year"],
        'TitleText' => '1984', 
        'units' => 2  
        ], [ 
        'XML_KEY' => '9991', 
        'MONTH' => get_relative_date(5)["Month"], 
        'YEAR' => get_relative_date(5)["Year"],
        'TitleText' => 'Keep the Aspidistra Flying', 
        'units' => 5  
        ], [ 
        'XML_KEY' => '9992', 
        'MONTH' => get_relative_date(5)["Month"], 
        'YEAR' => get_relative_date(5)["Year"], 
        'TitleText' => '1984', 
        'units' => 3 
        ], [ 
        'XML_KEY' => '9990', 
        'MONTH' => get_relative_date(5)["Month"], 
        'YEAR' => get_relative_date(5)["Year"], 
        'TitleText' => 'Animal Farm', 
        'units' => 3  
        ], [ 
        'XML_KEY' => '9990', 
        'MONTH' => get_relative_date(4)["Month"], 
        'YEAR' => get_relative_date(4)["Year"],
        'TitleText' => 'Animal Farm', 
        'units' => 4  
        ], [ 
        'XML_KEY' => '9991', 
        'MONTH' => get_relative_date(4)["Month"], 
        'YEAR' => get_relative_date(4)["Year"], 
        'TitleText' => 'Keep the Aspidistra Flying', 
        'units' => 4  
        ], [ 
        'XML_KEY' => '9992', 
        'MONTH' => get_relative_date(4)["Month"], 
        'YEAR' => get_relative_date(4)["Year"], 
        'TitleText' => '1984', 
        'units' => 3  
        ], [ 
        'XML_KEY' => '9990', 
        'MONTH' => get_relative_date(3)["Month"], 
        'YEAR' => get_relative_date(3)["Year"], 
        'TitleText' => 'Animal Farm', 
        'units' => 10 
        ], [ 
        'XML_KEY' => '9992', 
        'MONTH' => get_relative_date(3)["Month"], 
        'YEAR' => get_relative_date(3)["Year"],
        'TitleText' => '1984', 
        'units' => 4  
        ], [ 
        'XML_KEY' => '9991', 
        'MONTH' => get_relative_date(3)["Month"], 
        'YEAR' => get_relative_date(3)["Year"], 
        'TitleText' => 'Keep the Aspidistra Flying', 
        'units' => 1  
        ], [ 
        'XML_KEY' => '9990', 
        'MONTH' => get_relative_date(1)["Month"], 
        'YEAR' => get_relative_date(1)["Year"], 
        'TitleText' => 'Animal Farm', 
        'units' => 9  
        ], [ 
        'XML_KEY' => '9991', 
        'MONTH' => get_relative_date(1)["Month"], 
        'YEAR' => get_relative_date(1)["Year"], 
        'TitleText' => 'Keep the Aspidistra Flying', 
        'units' => 3  
        ], [ 
        'XML_KEY' => '9992', 
        'MONTH' => get_relative_date(1)["Month"], 
        'YEAR' => get_relative_date(1)["Year"], 
        'TitleText' => '1984', 
        'units' => 1  
        ]
    ];

这是我想要实现的输出:

Array
(
    [0] => Array
        (

            [YEAR] => 2014
            [TitleText] => 1984
            [units] => 27
        )

    [1] => Array
        (
            [YEAR] => 2014
            [TitleText] => Animal Farm
            [units] => 30
        )

    [2] => Array
        (
            [YEAR] => 2014
            [TitleText] => Keep the Aspidistra Flying
            [units] => 21
        )
    [3] => Array
        (

            [YEAR] => 2015
            [TitleText] => 1984
            [units] => 1
        )

    [4] => Array
        (
            [YEAR] => 2015
            [TitleText] => Animal Farm
            [units] => 9
        )

    [5] => Array
        (
            [YEAR] => 2015
            [TitleText] => Keep the Aspidistra Flying
            [units] => 3
        )
)

非常感谢您提供的任何帮助。

【问题讨论】:

    标签: php multidimensional-array associative-array


    【解决方案1】:

    如果你写你想要的输出更好的数组,我想你的数组 $monthly_sales 就像:

    Array
    (
        [0] => Array
            (
    
                [YEAR] => 2014
                [TitleText] => 1984
                [units] => 27
                [XML_KEY] => 9992
                [MONTH] => 10
                   ) 
    )
    

    代码:

        $info = array();
        $final = array();
    
        for($i = 0; $i < count($monthly_sales); $i++) {
        $year = $monthly_sales[$i]['YEAR'];
        $title = $monthly_sales[$i]['TitleText'];
    
        $info[$year][$title] += $monthly_sales[$i]['units'];
        }
    
        $i = 0;
        foreach ($info as $year => $data) {
          foreach($data as $title => $units) {
            $final[$i]['Year'] = $year;
            $final[$i]['TitleText'] = $title;
            $final[$i]['units'] = $units;
            $i++;
          }
        }
    
        print_r($final);
    

    【讨论】:

    • 谢谢 - 这不是我使用这个数组的唯一地方,所以我宁愿不重做它,除非没有其他选择。当然,元素的顺序无关紧要......我尝试了你的代码,而不是返回六个元素 - 每年一个/标题组合我每年只得到两个,但只有那一年数组中的最后一个标题- 这正是我尝试的每种方式都发生的事情 - 我不知道如何让它为每个组合创建一个不同的记录。
    • 请使用 print_r($monthly_sales); 的输出编辑您的帖子;
    • @Regina McCreary 我更新了代码,现在检查一下,但如果你编写 print_r($monthly_sales); 的输出会更好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多