2015-02-17 60 views
2

我有一个关联数组,基本上是一个模拟数据库的静态虚拟数据。我试图复制GROUPBY YEAR和TitleText在MySQL中所能做的事情,并且我可以使其在一个字段上工作 - 无论是TitleText还是YEAR使用array_reduce,但我无法弄清楚如何在两个字段上进行操作。我需要每个YEAR和TitleText组合的一行来总和单位。这里是数组:根据匹配的两个其他值(php)在多维关联数组中求和一个值

$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 
     ) 
) 

我非常感谢你能提供任何帮助。

回答

0

如果你写你的数组一样,你要的是更好的outpout,我想你是数组$ 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); 
+0

感谢 - 这ISN”这是我使用这个数组的唯一地方,所以我宁愿不重做它,除非没有别的选择。当然,这些元素的顺序无关紧要......我尝试了你的代码,而不是返回六个元素 - 每年一个/标题组合我每年只有两个,但只有当年数组中的最后一个标题 - 这正是我每次尝试它时发生的事情 - 我无法弄清楚如何让它为每个组合创建一个独特的记录。 – 2015-02-17 23:58:42

+0

请使用print_r($ monthly_sales)的输出编辑您的帖子; – 2015-02-18 00:00:55

+0

@Regina McCreary我更新了代码,现在检查它,但如果你写出print_r($ monthly_sales)的输出结果会更好。 – 2015-02-18 00:10:16

相关问题