问题:两个二维数组,其中某一个字段需要相加,前提是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);