【问题标题】:Sum array values excluding value of element with specific key对数组值求和,不包括具有特定键的元素的值
【发布时间】:2018-07-04 15:28:18
【问题描述】:

如果我有:

$my_array = array(
    "user1" => "100",
    "user2" => "200",
    "user3" => "300"
);

如何使用 array_sum 计算除 user3 之外的值的总和?

我试过这个函数(array_filter),但它不起作用:

function filterArray($value) {
    return ($value <> "user3");
}

我使用的是 PHP 5.2.17 版

【问题讨论】:

  • array_sum(array_filter())?

标签: php arrays array-filter php-5.2 array-sum


【解决方案1】:
array_sum(array_filter($my_array, 
                       function ($user) { return $user != 'user3'; },
                       ARRAY_FILTER_USE_KEY))

ARRAY_FILTER_USE_KEY 在 PHP 5.6 中可用。

或者:

array_sum(array_diff_key($my_array, array_flip(array('user3'))))

【讨论】:

    【解决方案2】:

    另一种方法:

    foreach ($my_array as $key => $value) {
        if ($key !== "user3") {
            $sum += $value;
        }
    }
    echo $sum;
    

    【讨论】:

      【解决方案3】:

      与其使用多个函数多次迭代数组或进行迭代比较,不如无条件地对所有内容求和并减去不需要的值。

      如果数组中可能不存在不需要的元素,则通过空合并运算符回退到 0。

      代码:(Demo)

      echo array_sum($my_array) - ($my_array['user3'] ?? 0);
      // 300
      

      另一方面,如果改变输入数组是安全的(因为数据在有限的范围内,或者如果您不再需要原始形式的数组),那么unset() 是一个无条件的解决方案。

      unset($my_array['user3']);
      echo array_sum($my_array);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-25
        • 1970-01-01
        • 2010-12-29
        • 1970-01-01
        • 2017-04-27
        相关资源
        最近更新 更多