我有一个对象数组,我想要对其中一个属性的值求和,例如:
Array
(
[0] => stdClass Object
(
[name] => jon
[commission] => 5
)
[1] => stdClass Object
(
[name] => smith
[commission] => 1
)
[2] => stdClass Object
(
[name] => philip
[commission] => 8
)
)
我想总结数组中的所有佣金,结果应为14.
这有什么好方法?
答案 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