多维数组,相同键的总和

问题描述 投票:0回答:1

我有一个多维数组。我需要使用相同的“驱动程序”和“日期”键总结距离值

Input : 

$firstArr = array(
0 =>array('driver'=>'xxxx',
                    'distance' => 100,
                    'vehicle' => 1,
                    'date' => '2019-10'),

1=>array('driver'=>'xxxx',
                    'distance' => 200,
                    'vehicle' => 2,
                    'date' => '2019-10'),
2=>array('driver'=>'yyyy',
                    'distance' => 100,
                    'vehicle' => 3,
                    'date' => '2019-10'));

预期输出:

$finalArr = array(
0 =>array('driver'=>'xxxx',
                    'distance' => 300,
                    'vehicle' => '1,2',
                    'date' => '2019-10'),

1=>array('driver'=>'yyyy',
                    'distance' => 100,
                    'vehicle' => 3,
                    'date' => '2019-10'));

我尝试了以下代码。但是输出是按日期排列的数组。

$subArr = array();
foreach($firstArr as $key => $val){
$subArr[$val['driver']][$val['date']]['distance'] += $val['distance'];
$subArr[$val['driver']][$val['date']]['vehicle'] .= $val['vehicle'].',';
$subArr[$val['driver']][$val['date']]['date'] = $val['date'];
$subArr[$val['driver']][$val['date']]['driver'] = $val['driver'];

}
$result = array_values($subArr); 
php
1个回答
0
投票
您可以使用dirverdate作为键,

$result = []; foreach($array as $v){ $key = $v["dirver"] . "_" . $v["date"]; if(isset($result[$key])){ $result[$key] += $v["distance"]; }else{ $result[$key] = $v; } }


0
投票
执行如下操作:-

$finalArray= array(); foreach($firstArr as $arr){ if(!isset($finalArray[$arr['driver']])){ $finalArray[$arr['driver']] = $arr; }else{ $finalArray[$arr['driver']]['distance']= $finalArray[$arr['driver']]['distance']+$arr['distance']; $finalArray[$arr['driver']]['vehicle']= $finalArray[$arr['driver']]['vehicle'].','.$arr['vehicle']; } } print_r(array_values($finalArray));

输出:-https://3v4l.org/S8hdn
© www.soinside.com 2019 - 2024. All rights reserved.