在数组中求和对象属性

use*_*762 8 php

我有一个对象数组,我想要对其中一个属性的值求和,例如:

Array
(
[0] => stdClass Object
    (
        [name] => jon
        [commission] => 5

    )
[1] => stdClass Object
    (
        [name] => smith
        [commission] => 1

    )
[2] => stdClass Object
    (
        [name] => philip
        [commission] => 8

    )
)  
Run Code Online (Sandbox Code Playgroud)

我想总结阵列中的所有佣金,结果应该是14.

这有什么好办法?

ilp*_*jin 32

array_reduce可能是一种方法; 只需添加您的$array

$sum = array_reduce($array, function($carry, $item)
{
    return $carry + $item->commission;
});

var_dump($sum);
Run Code Online (Sandbox Code Playgroud)

  • 是否有必要在回调中使用`+ =`运算符?我猜它可以只是`+`? (2认同)

Sha*_*ran 9

如果您使用的是PHP 5.5

$arr_new = array_sum(array_column($yourarray, 'commission'));
Run Code Online (Sandbox Code Playgroud)

  • OP有一个对象,而不是数组. (4认同)
  • 是的,但是如果对象属性是公共的,则这将以类似的方式工作。 (2认同)

ziG*_*iGi 8

假设$ arr存储您的信息.实现以下功能:

function sumProperties(array $arr, $property) {

    $sum = 0;

    foreach($arr as $object) {
        $sum += isset($object->{$property}) ? $object->{$property} : 0;
    }

    return $sum;
}
Run Code Online (Sandbox Code Playgroud)

之后你只需要打电话sumProperties($array, 'commission').

此外,如果您有更多可以求和的属性,您可以用这些属性替换佣金.


Dee*_*epu 5

$sum = 0;
foreach($arrObj as $key=>$value){
  if(isset($value->commission))
     $sum += $value->commission;
}
echo $sum;
Run Code Online (Sandbox Code Playgroud)

  • 如果数组中的某些对象不包含佣金或佣金等于空,会发生什么情况? (2认同)