【问题标题】:How to make sum of this array?如何对这个数组求和?
【发布时间】:2012-12-24 21:12:23
【问题描述】:

我想对所有 [Suggested] 字段求和。 请问我该怎么做? 我使用 PHP。

Array
(
    [0] => Array
        (
            [Id] => 4
            [Suggested] => 1322
            [proximite_r] => 30924.8470655462
        )

    [1] => Array
        (
            [Id] => 7
            [Suggested] => 773
            [proximite_r] => 32229.1036975145
        )
)

谢谢!

【问题讨论】:

  • 您能否重新格式化您的数组以提高可读性?
  • 我不认为你最外层的结构是清楚的。您在“根”级别有多个数组。这是一个数组数组吗?
  • 寻找一个名为array_column的函数,然后有array_sum;

标签: php arrays sum


【解决方案1】:

给你,伙计:array_reduce() 像个老板

// PHP >= 5.3
$sum = array_reduce($items, function($sum, $item){
  return $sum += $item['Suggested'];
}, 0);

// PHP 5.2
function _sum($sum, $item){
  return $sum += $item['Suggested'];
}
$sum = array_reduce($items, '_sum', 0);

遗憾的是 PHP

【讨论】:

  • lambda 中缺少分号;固定。
  • @FrancoisM,那时您可能正在运行 PHP
  • @FrancoisM,我还添加了一个 PHP
【解决方案2】:

你可以试试这个:

$Sum = 0;
foreach ($row as $item) {
   $Sum += $item['Suggested']; // or else index
}
echo $Sum;

【讨论】:

    【解决方案3】:
    $sum = array_sum(
                  array_map(function($item) { return $item["Suggested"]; }, $items)
           );
    

    【讨论】:

    • @TomvanderWoerdt 这有什么过分的?
    • Overkill 同意了;需要对集合进行两次迭代。我的回答中描述的一个简单的array_reduce() 就足够了。
    • 也许更快,但这段代码是孤立的。在 Web 应用程序内部,它几乎不会成为瓶颈,尤其是对于任何磁盘使用或数据库访问。
    【解决方案4】:

    鉴于array_column 函数可能会出现在 PHP 5.5 中:

    function array_column($input, $key) {
        if (is_array($key) || !is_array($input)) return array();
        $array = array();
        foreach($input as $v) {
            if(array_key_exists($key, $v)) $array[]=$v[$key];
        }
        return $array;
    }
    

    (来源:php.net)

    你可以用这个:

    $sum = array_sum(array_column($items, 'Suggested'));
    

    当然,这有点矫枉过正,我只想指出,这也是实现它的一种方式。

    【讨论】:

    • @webnoob 是的,这有点矫枉过正。然而,这是实现它的一种方式,这就是我指出它的原因。
    • 我不认为这是矫枉过正。
    【解决方案5】:

    另一种遍历数组的方法是使用for循环,假设是$arr:

    <?php    
    function getSumOfKey($arr, $key){
         $sum = 0;
         for ($i = 0; $i < count($arr); $i++){
          (is_numeric($arr[$i][$key]))? $sum += $arr[$i][$key] : continue;
         }
         return $sum;
        } 
    ?>
    

    实现它:

    echo 'The sum is: '.getSumOfKey($arr, 'Suggested');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-18
      • 2021-11-29
      • 2012-04-30
      • 2020-01-16
      • 2021-08-12
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多