1. 程式人生 > >二維數組合並值相加

二維數組合並值相加

問題:兩個二維陣列,其中某一個欄位需要相加,前提是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);