この記事では、PHP で特定のキー名を持つ 2 次元配列をグループ化および追加するサンプル プログラムを紹介します。このチュートリアルが役立つことを願っています。
タイトルのように、データベースからデータを取得する場合は、次のことができます
SELECT SUM(t_value),t_id FROM t_table GROUP BY t_id
ただし、PHP プログラムで同様の問題に対処する場合は、もう少し面倒になります。同様の問題に対処するための関数を次に示します。
コードをコピー | |
/* 関数: 特定のキー名を持つ 2 次元配列をグループ化して追加し、新しい 2 次元配列を返します * パラメータの説明: $arr-source 配列; $new_arr-new 追加後に取得される配列; $target_key-グループ化されるキー名 */ 関数 add_array($arr, &$new_arr, $target_key) { $num = count($new_arr); // 新しい配列のサイズを計算します。最初の次元はここで計算されます。 for ($i = 0; $i < $num; $i++) { // 新しい配列をループします // if ブロックは主に、重複を避けるために、現在のグループのキー名が新しい配列にすでに存在するかどうかを判断します // この関数はループ内で呼び出され、新しい配列には複数の要素が含まれる可能性があるため、新しい配列のすべての要素を比較する必要があります。 // 新しい配列の要素は 1 次元配列であり、$i は新しい 2 次元配列内のグループ化キー名を動的に比較します if ($arr[$target_key] != $new_arr[$i][$target_key]) {//新しい配列のグループ化キー名が現在のソース配列のグループ化キー名と等しいかどうかを判断します $cmp_num++; //等しくない場合、比較の数は 1 つ増加します } else {//等しい場合、現在のグループ化キー名がすでに存在することを意味します $tar_exist = true //存在フラグを true に設定します $tar_key = $i //新しい配列内の現在のグループ化キー名の数値インデックスを返します ;ブレーク // ループから抜け出す } } //比較の数が新しい配列のサイズと同じ場合、現在のグループ化キー名が新しい配列にないことを意味し、存在フラグを false に設定します if ($cmp_num == $num) $tar_exist = false; if ($tar_exist) {//グループ化キー名がすでに存在する場合、グループ化の配列要素を追加しますforeach ($arr as $key => $value) { if ($key != $target_key) {//グループ化キー名に対応する要素の値が合計されません $new_arr[$tar_key][$key]+=$value; // 残りの要素の値を追加します } } } その他 { //グループ化キー名が存在しない場合 // 新しいグループ化キー名を設定し、グループ化の配列要素を追加します //新しい配列の最初の次元は、$num パラメータを使用して現在のグループ化の順序を決定します // $num は実際には新しい配列内のキー名グループの数であり、0 から始まるため、新しい配列内の新しいグループのインデックスは直接 $num になります。
$new_arr[$num][$target_key] = $arr[$target_key]; foreach ($arr as $key => $value) {if ($key != $target_key) {//グループ化キー名に対応する要素の値が合計されません $new_arr[$num][$key]+=$value; //残りの要素は相加を実行します } } } } $arr = 配列( array('group_id' => 13, 'team_price' => 88.00, 'Satpay_price' => 85.00, 'team_id' => 348, 'origin' => 440, 'gain' => 14.45 、「数量」 => 5)、; array('group_id' => 13, 'team_price' => 12.00, 'satopay_price' => 11.00, 'team_id' => 344, 'origin' => 36, 'gain' => 2.76 、「数量」 => 3)、 ;array('group_id' => 14, 'team_price' => 4.99, 'satopay_price' => 4.60, 'team_id' => 335, 'origin' => 4.99, 'gain' => 0.31915 、「数量」 => 1)、 ;array('group_id' => 14, 'team_price' => 12.00, 'Satpay_price' => 11.00, 'team_id' => 344, 'origin' => 24, 'gain' => 1.84 、「数量」 => 2)、 ;array('group_id' => 15, 'team_price' => 13.00, 'satopay_price' => 11.00, 'team_id' => 344, 'origin' => 24, 'gain' => 1.84 、「数量」 => 2)、 ;); $new_arr = array(); foreach ($arr as $key => $value) { add_array($value, &$new_arr, 'group_id'); //这里我们按group_id进行分组相加 } var_dump($new_arr); |