二維數組合並值相加
阿新 • • 發佈:2018-12-07
問題:兩個二維陣列,其中某一個欄位需要相加,前提是site_id pay_type org_id 相同的值才累加 aaa
$aInfo1 =[ [ "site_id"=> 1, "pay_type"=> 101, "org_id"=>'102', "aaa"=> "100" ], [ "site_id"=> 1, "pay_type"=> 103, "org_id"=>'102', "aaa"=> "200" ], [ "site_id"=> 1, "pay_type"=> 101, "org_id"=>'103', "aaa"=> "300" ], [ "site_id"=> 1, "pay_type"=> 103, "org_id"=>'2', "aaa"=> "400" ], ]; $aInfo2 =[ [ "site_id"=> 1, "pay_type"=> 101, "org_id"=>'102', "aaa"=> "500" ], [ "site_id"=> 2, "pay_type"=> 109, "org_id"=>'102', "aaa"=> "600" ], [ "site_id"=> 1, "pay_type"=> 101, "org_id"=>'103', "aaa"=> "700" ], [ "site_id"=> 2, "pay_type"=> 103, "org_id"=>'2', "aaa"=> "800" ], ];
//第一種寫法,n方,效率低 $aInfo = []; for ($i = 0; $i < count($aInfo2); $i++){ //unset($aInfo2[$i]['flag']); $flag = 0; $sum = $aInfo2[$i]['aaa']; for ($j = $i + 1; $j < count($aInfo2); $j++){ if ($aInfo2[$i]['site_id'] == $aInfo2[$j]['site_id']&& $aInfo2[$i]['pay_type'] == $aInfo2[$j]['pay_type'] && $aInfo2[$i]['org_id'] == $aInfo2[$j]['org_id'] && !isset($aInfo2[$j]['flag'])) { $sum = $sum + $aInfo2[$j]['aaa']; $aInfo[$i] = [ "site_id"=> $aInfo2[$i]['site_id'], "pay_type"=> $aInfo2[$i]['pay_type'], "org_id"=> $aInfo2[$i]['org_id'], "aaa"=> $sum ]; $aInfo2[$j]['flag'] = 1; $flag = 1; } } if ($flag == 0 && !isset($aInfo2[$i]['flag'])) { $aInfo[$i] = $aInfo2[$i]; } } //第二種 $aInfo = []; foreach ($aInfo2 as $k => $v) { $key = $v['site_id'].'-'.$v['pay_type'].'-'.$v['org_id']; if (isset($aInfo[$key])) { $aInfo[$key]['aaa'] = $aInfo[$key]['aaa'] + $v['aaa']; }else { $aInfo[$key] = $v; } } $aInfo = array_values($aInfo);