Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多维数组上的Group by_Php_Arrays_Group By - Fatal编程技术网

Php 多维数组上的Group by

Php 多维数组上的Group by,php,arrays,group-by,Php,Arrays,Group By,我担心我想做的事情是不可能的,但我希望你能帮助我找到解决这个问题的好方法 我得到了以下PHP数组: Array ( [0] => Array ( [article] => 10.499-1 [operation] => KN_KABEL [date] => 31-05-2013 [hours] => 0 [quantity] => 1 ) [1] => Array ( [article] => 10.499-1 [operati

我担心我想做的事情是不可能的,但我希望你能帮助我找到解决这个问题的好方法

我得到了以下PHP数组:

Array ( 
    [0] => Array ( [article] => 10.499-1 [operation] => KN_KABEL [date] => 31-05-2013 [hours] => 0 [quantity] => 1 ) 
    [1] => Array ( [article] => 10.499-1 [operation] => LAS_LABEL [date] => 31-05-2013 [hours] => 0 [quantity] => 1 ) 
    [2] => Array ( [article] => 10.499-1 [operation] => ASS_HARNES [date] => 04-06-2013 [hours] => 0 [quantity] => 1 ) 
    [3] => Array ( [article] => 10.499-1 [operation] => CONTROLE [date] => 07-06-2013 [hours] => 0 [quantity] => 1 ) 
    [4] => Array ( [article] => 24.030 [operation] => LAS_LABEL [date] => 04-06-2013 [hours] => 0 [quantity] => 1 ) 
    [5] => Array ( [article] => 24.030 [operation] => ZAGEN-RAIL [date] => 04-06-2013 [hours] => 0 [quantity] => 1 ) 
    [6] => Array ( [article] => 24.030 [operation] => KN_KABEL [date] => 04-06-2013 [hours] => 0 [quantity] => 1 ) 
    [7] => Array ( [article] => 24.030 [operation] => ASS_RAIL [date] => 05-06-2013 [hours] => 0 [quantity] => 1 ) 
    [8] => Array ( [article] => 791 070-6/GS/P [operation] => GS_UNIT [date] => 04-06-2013 [hours] => 0 [quantity] => 1 ) 
    [9] => Array ( [article] => 791 070-6/GS/P [operation] => PR_UNIT [date] => 04-06-2013 [hours] => 0 [quantity] => 1 ) 
    [10] => Array ( [article] => 791 070-6/GS/P [operation] => LAS_LABEL [date] => 04-06-2013 [hours] => 0 [quantity] => 1 ) 
    [11] => Array ( [article] => ESS-0834E/LE-CD200 [operation] => MAGAZIJN [date] => 10-06-2013 [hours] => 0 [quantity] => 1 ) 
    [12] => Array ( [article] => ESS-0834E/LE-CD200 [operation] => PR_UNIT [date] => 11-06-2013 [hours] => 0 [quantity] => 1 ) 
    [13] => Array ( [article] => ESS-0834E/LE-CD200 [operation] => LAB_PLAKKE [date] => 11-06-2013 [hours] => 0 [quantity] => 1 )
)  
我试图做的是计算每个日期(关键“数据”)的小时数总和(在本例中,它们都是0,但我仍然希望这样做,因为这将在未来发生变化)。非常实用的方法是执行类似sql的查询,如
选择按日期分组的总和(小时数)
,但不幸的是,这不是sql

是否有一种方法可以按特定键(在本例中为“日期”)对数组进行分组(和排序),或者,如果没有,是否有其他方法可以获得我想要的结果

编辑


我最近添加了一个关键的“部门”,它应该按to分组。因此,我不仅要计算“小时”的总和,还要计算“数量”

只需为此创建简单的foreach即可

$arr = array();

$sums = array();
foreach($arr as $k=>$v)
{
     if(!isset($sums[$v['date']][$v['department']]['hours'])) $sums[$v['date']][$v['department']]['hours'] = 0;
     if(!isset($sums[$v['date']][$v['department']]['quantity'])) $sums[$v['date']][$v['department']]['quantity'] = 0;
     $sums[$v['date']][$v['department']]['hours'] += $v['hours'];
     $sums[$v['date']][$v['department']]['quantity'] += $v['quantity'];
}
print_r($sums);
它将创建数组
$sum
,其中键是日期。如果值不存在,则将小时值添加到0,否则如果值存在,则将添加到现有值

编辑


适合OP需求。

这对我来说非常有用,谢谢!2个问题?我在数组中添加了一个关键的“部门”。也可以“分组”2列。第二:我也想数一数关键的“数量”。是否可以在相同的代码中执行此操作?很抱歉在我的问题中没有注意到这一点。我将编辑我的问题和课程的附加要求,这是可能的
$sums[$v['date']][$v['department']]]
小的变化和它的工作:)数量可以以同样的方式计算;)$sums[$v['date'][$v['department']]数组的值也可以是数组,您可以在其中输入小时数和数量并求和。您从代码中删除了“in_array()”部分,这是您的意图还是您忘记了它?因为现在我有很多未定义的索引错误