[英]Multi dimensional array, sum values of the same key
我有一個多維數組。 我需要用相同的“驅動程序”和“日期”鍵來總結距離值
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);
您可以使用dirver
和date
作為重點, 演示
$result = [];
foreach($array as $v){
$key = $v["driver"] . "_" . $v["date"];
if(isset($result[$key])){
$result[$key]["distance"] += $v["distance"];
}else{
$result[$key] = $v;
}
}
$result = array_values($result);
使用dreiver
列作為索引來dreiver
和連接事物,操作如下:-
$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'];
}
}
$finalArray = array_values($finalArray);
print_r($finalArray);
輸出: -https : //3v4l.org/ZTem8
您還可以使用array_reduce來按駕駛員和日期匯總距離和車輛。 借助於array_combine,我們可以為每個驅動程序日期組合設置初始數組(如果不存在),然后處理必填字段。
$keys = array_keys($input[0]);
$result = array_reduce($input, function ($sum, $row) use ($keys) {
$key = $row['driver'] . $row['date'];
$sum[$key] = $sum[$key] ?? array_combine($keys, [$row['driver'], null, null, $row['date']]);
$sum[$key]['distance'] += $row['distance'];
$sum[$key]['vehicle'] .= (($sum[$key]['vehicle']) ? ',': '' ) . $row['vehicle'];
return $sum;
}, []);
結果是:
Array
(
[xxxx2019-10] => Array
(
[driver] => xxxx
[distance] => 300
[vehicle] => 1,2
[date] => 2019-10
)
[yyyy2019-10] => Array
(
[driver] => yyyy
[distance] => 100
[vehicle] => 3
[date] => 2019-10
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.