Php 多维数组上的Group by
我担心我想做的事情是不可能的,但我希望你能帮助我找到解决这个问题的好方法 我得到了以下PHP数组: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
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()”部分,这是您的意图还是您忘记了它?因为现在我有很多未定义的索引错误