我有一个二维数组。如何按日期值分组并合并每个日期的主动值和被动值?
[
["status" => "ONE", "active" => "103347.02", "passive" => " ", "date" => "2016-08-01"],
["status" => "TWO", "active" => "65.32", "passive" => " ", "date" => "2016-08-01"],
["status" => "THREE", "active" => "3258.39", "passive" => " ", "date" => "2016-08-01"],
["status" => "FOUR", "active" => "35470.01", "passive" => " ", "date" => "2016-08-01"],
["status" => "ONE", "active" => "152685.68", "passive" => " ", "date" => "2016-08-02"],
["status" => "TWO", "active" => "1739.33", "passive" => " ", "date" => "2016-08-02"],
["status" => "THREE", "active" => "1300.00", "passive" => " ", "date" => "2016-08-02"],
["status" => "FOUR", "active" => "31461.06", "passive" => " ", "date" => "2016-08-02"],
["status" => "ONE", "active" => " ", "passive" => "2236", "date" => "2016-08-01"],
["status" => "THREE", "active" => " ", "passive" => "4496", "date" => "2016-08-02"]
]
预期结果:
[
["status" => "ONE", "active" => "103347.02", "passive" => "2236", "date" => "2016-08-01"],
["status" => "TWO", "active" => "65.32", "passive" => " ", "date" => "2016-08-01"],
["status" => "THREE", "active" => "3258.39", "passive" => " ", "date" => "2016-08-01"],
["status" => "FOUR", "active" => "35470.01", "passive" => " ", "date" => "2016-08-01"],
["status" => "ONE", "active" => "152685.68", "passive" => " ", "date" => "2016-08-02"],
["status" => "TWO", "active" => "1739.33", "passive" => " ", "date" => "2016-08-02"],
["status" => "THREE", "active" => "1300.00", "passive" => "4496", "date" => "2016-08-02"],
["status" => "FOUR", "active" => "31461.06", "passive" => " ", "date" => "2016-08-02"]
]
最简单的解决方案是按日期重新索引,并将数字加在一起。 您可以在 php 中输入杂耍字符串。
$output = [];
foreach($array as $item){
if(!isset($output[$item['date']])){
$output[$item['date']] = $item;
} else {
$output[$item['date']]['active'] += $item['active'];
$output[$item['date']]['passive'] += $item['passive'];
}
}
//You can optionally remove the date keys again with:
$output = array_values($output);
这是获得输出的另一种方式。
$input=array(
0=> array( "status"=> "ONE" ,"active"=> "103347.02","passive"=>" " ,"date"=> "2016-08-01" ),
1=> array( "status"=> "TWO" ,"active"=> "65.32" ,"passive"=> " " ,"date"=> "2016-08-01" ),
2=> array("status"=> "THREE" ,"active"=> "3258.39" ,"passive"=> " " ,"date"=>"2016-08-01" ),
3=> array( "status"=> "FOUR" ,"active"=> "35470.01" ,"passive"=> " " ,"date"=>"2016-08-01" ),
4=> array( "status"=> "ONE" ,"active"=> "152685.68" ,"passive"=> " " ,"date"=> "2016-08-02" ),
5=> array( "status"=> "TWO" ,"active"=> "1739.33" ,"passive"=> " " ,"date"=> "2016-08-02" ),
6=> array( "status"=> "THREE" ,"active"=> "1300.00" ,"passive"=> " " ,"date"=> "2016-08-02" ),
7=> array( "status"=> "FOUR" ,"active"=> "31461.06" ,"passive"=> " " ,"date"=> "2016-08-02" ),
8=> array( "status"=> "ONE" ,"active"=> " " ,"passive"=> "2236" ,"date"=> "2016-08-01"),
9=> array( "status"=> "THREE" ,"active"=> " " ,"passive"=> "4496" ,"date"=> "2016-08-02" )
);
foreach($input as $index_1 => $value_1){
if(ctype_space($value_1['active']) && !ctype_space($value_1['passive'])) {
foreach($input as $index_2 => $value_2){
if($value_2['status']==$value_1['status'] && ctype_space($value_2['passive'])){
$input[$index_2]['passive']=$value_1['passive'];
unset($input[$index_1]);
break;
}
}
}
}
var_dump($input);