按一个属性对一组对象进行分组,并对每组中的另一个属性求和

问题描述 投票:0回答:2

我正在尝试按“字段->值”对 PHP foreach 中的项目进行分组,并分别获取每个组的总和。 下面的代码可以工作,但我觉得有更有效的方法吗?

$number_1 = 0;
$number_2 = 0;
$number_3 = 0;

foreach ( $fields as $field ) {   
  if($field->value == 1) {
    $number_1 += $field->number;
  }
  if($field->value == 2) {
    $number_2 += $field->number; 
  }
  if($field->value == 3) {
    $number_3 += $field->number; 
  }
  
}  

echo $number_1; 
echo $number_2; 
echo $number_3;
php arrays multidimensional-array sum grouping
2个回答
2
投票

在这种情况下,您可以使用可变变量。
一般来说,我宁愿推荐一个数组,但这是你的选择。

foreach ( $fields as $field ) {  
     ${"number_" . $field->value} += $field->number;
}

数组版本。

foreach ( $fields as $field ) {  
     $arr["number_" . $field->value] += $field->number;
}
//  Either output as array or extract values to separate variables.  

Echo $arr["number_1"];
//Or
Extract($arr);
Echo $number_1;

编辑了应有值的数字。


1
投票

不要使用单独的变量,使用以

$field->value
作为索引的数组。

$numbers = array();
foreach ($fields as $field) {
    if (isset($numbers[$field->value])) {
        $numbers[$field->value] += $field->number;
    } else {
        $numbers[$field->value] = $field->number;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.