在数组中求和对象属性

时间:2013-11-25 13:25:43

标签: php

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

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

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

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

    )
)  

我想总结数组中的所有佣金,结果应为14.

这有什么好方法?

5 个答案:

答案 0 :(得分:27)

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

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

var_dump($sum);

答案 1 :(得分:8)

如果您使用的是PHP 5.5

$arr_new = array_sum(array_column($yourarray, 'commission'));

答案 2 :(得分:8)

让我们说$ arr存储您的信息。实现以下功能:

function sumProperties(array $arr, $property) {

    $sum = 0;

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

    return $sum;
}

之后,您只需致电sumProperties($array, 'commission')

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

IMO 最干净的解决方案是使用 reduce

$total = array_reduce( commissionsArray, function ($sum, $entry) {
  $sum += $entry->commission;
  return $sum;
}, 0);

您可以在这里查看:
https://wtools.io/php-sandbox/b4nG

但是,如果您的数组包含数组而不是对象,您可以使用可读代码(如果您的 php 版本在 8.0.0 之前,它适用于对象,但它不是一个很好的练习使用隐式强制转换):

array_sum(array_column($commissionsArray, 'importe_final'));

你可以在这里查看:
https://wtools.io/php-sandbox/b4nK