2017-01-17 5 views
1

私はこのようなものになります($ _POSTから、ないDB)入ってくるデータの動的な量を処理する必要があります。変数/配列のPHPコードでSELECT SUM()GROUP BYクエリの式を作成しますか?

ID | VALUE 
10000 | 15.50 
10000 | 25.00 
11000 | 40.25 
12000 | 20.25 
11000 | 10.50 

をと合計し、グループすべてがこのように見える終わるすることを多次元配列を生成します:

array(
    0 => array ('id'=>10000, 'value'=>40.50), 
    1 => array ('id'=>11000, 'value'=>50.75), 
    2 => array ('id'=>12000, 'value'=>20.25) 
) 

だから、基本的にSQL文:

SELECT id, SUM(value) FROM [table] GROUP BY id; 

私は現在、解決策をブルートフォースしようとしていると取得する必要最終的には、私はPHPでこれを行うための 'エレガントな'方法があるのだろうか?

答えて

0

あります:ID値をキーとして連想配列を使用します。あなたは、アレイ内の各IDの累計を保つ、の値を読んでその後

$totals = array(); 

:空の配列を初期化することにより

スタート入力の終わりに

for (...) { // Read in data 
    if (!array_key_exists($id, $totals)) 
     $totals[$id] = $value; 
    else 
     $totals[$id] += $value; 
} 

$totals各IDの合計を保持しており、すぐに出力できます。

echo 'ID | VALUE' . PHP_EOL; 
foreach ($totals as $id => $total) 
    echo $id . ' | ' . $total . PHP_EOL; 

あなたの質問のようにnインデックス配列:

$indexed_totals = array(); 
foreach ($totals as $id => $total) 
    $indexed_totals[] = array ($id, $total); 
+0

素晴らしい、ありがとう! – Randy

+0

@Randy素晴らしい!私の答えは受け入れられているとマークしてください。そしてStack Overflowへようこそ! –