对于每种不同颜色,将'val'字段与相同'颜色'相加的最佳方法是什么:
Array
(
[0] => Array
(
[color]=> "red"
[val]=> 4
)
[1] => Array
(
[color]=> "green"
[val]=> 3
)
[2] => Array
(
[color]=> "blue"
[val]=> 1
)
[3] => Array
(
[color]=> "green"
[val]=> 6
)
[4] => Array
(
[color]=> "blue"
[val]=> 2
)
)
期望的结果:红色:4;绿色:9;蓝色:3。
此致 埃利奥·费尔南德斯
答案 0 :(得分:1)
为了便于阅读,我会将其循环播放。
$output = array();
foreach($array as $value){
if(!isset($output[$value['color']])) $output[$value['color']] = 0; //Ensure the value is 0 if it doesn't exist
$output[$value['color']] += $value['val']; //Add the total for that color
}
这将返回一组颜色到总计数。
答案 1 :(得分:1)
就我个人而言,我使用array_reduce
执行此类操作,但如上所述,它可能不是最易读的选项。绝对是一个意见问题。
$result = array_reduce($array, function ($carry, $item) {
$carry[$item['color']] = $carry[$item['color']] ?? 0;
$carry[$item['color']] += $item['val'];
return $carry;
}, []);
编辑:修复通知
答案 2 :(得分:1)
您可以使用array_reduce
来获得越来越少的可读代码:
$array = array
(
0 => array("color"=> "red","val"=> 4),
1 => array("color"=> "blue","val"=> 3),
2 => array("color"=> "blue","val"=> 1)
);
function sum($accumulator, $item){
$accumulator[$item['color']] = $accumulator[$item['color']] ?? 0;
$accumulator[$item['color']] += $item['val'];
return $accumulator;
}
$sum = array_reduce($array, "sum");
var_dump($sum); // return here array(2) { ["red"]=> int(4) ["blue"]=> int(4) }
答案 3 :(得分:0)
我会这样做,使用foreach循环:
$temp = [];
foreach($arr as $value) {
//check if color exists in the temp array
if(!array_key_exists($value['color'], $temp)) {
//if it does not exist, create it with a value of 0
$temp[$value['color']] = 0;
}
//Add up the values from each color
$temp[$value['color']] += $value['val'];
}
答案 4 :(得分:-1)
$arrays = array(
array(
"color"=>"red",
"val"=>4
),
array(
"color"=>"green",
"val"=>3
)
);
foreach ($color as $array) {
echo $array["color"].": ".$array["val"].";";
}