PHP - 使用相同的键对值求和

时间:2017-11-07 14:55:46

标签: php json sum

对于每种不同颜色,将'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。

此致 埃利奥·费尔南德斯

5 个答案:

答案 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;
}, []);

请参阅https://eval.in/894644

编辑:修复通知

答案 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) }

文档:http://php.net/manual/en/function.array-reduce.php

答案 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"].";";
}