2

私がやろうとしていることは単純に不可能だと思いますが、この問題を解決する良い方法を見つけるのを手伝ってくれることを願っています.

私は次の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 )
)  

私がやろうとしているのは、各日付 (キー "datum") の時間の合計をカウントすることです (この例では、すべて 0 ですが、これは将来変更されるため、まだこれを実行したいと考えています)。非常に実用的なのは、SQLのようなクエリを実行することですが、SELECT SUM(hours) GROUP BY date残念ながらこれはSQLではありません。

配列を特定のキー (この場合は「日付」) でグループ化 (および順序付け) する方法はありますか? そうでない場合は、必要な結果を得る別の方法がありますか?

編集

最近、グループ化する必要があるキー「部門」を追加しました。これにより、「時間」の合計だけでなく、「数量」もカウントしたい

4

1 に答える 1

2

このために単純に 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のニーズに適合。

于 2013-05-27T12:21:06.327 に答える