一尘不染

无循环键的多维数组的总和

mysql

我有这个:

Array (
    [0] => Array ( [f_count] => 1 [uid] => 105 ) 
    [1] => Array ( [f_count] => 0 [uid] => 106 ) 
    [2] => Array ( [f_count] => 2 [uid] => 107 ) 
    [3] => Array ( [f_count] => 0 [uid] => 108 ) 
    [4] => Array ( [f_count] => 1 [uid] => 109 ) 
    [5] => Array ( [f_count] => 0 [uid] => 110 ) 
    [6] => Array ( [f_count] => 3 [uid] => 111 )
)

我需要的是:7“,这是f_count列的总和。

我已经尝试了几个小时了。我以为array_sum()可以,但是不适用于多维数组。因此,我试图弄清楚如何f_count通过unset()或剪接或其他方式隔离s
,但是每种解决方案似乎都涉及一个foreach循环。我弄乱了array_maparray_walk和其他人,但无济于事。我还没有找到一个可以很好地处理多维数组的函数。

我正在运行PHP 5.4。

有人可以告诉我如何在没有foreach循环的情况下求和该列吗?

如果有帮助,则f_count值将永远不会大于100,并且uid值将始终大于100


另外,如果有一种方法可以不同地运行我的查询,使得数组不是多维的,那显然也可以。

$query = "SELECT f_count, uid FROM users WHERE gid=:gid";
...
$array = $stmt->fetchAll();

我正在使用PDO。


阅读 195

收藏
2020-05-17

共1个答案

一尘不染

您需要将其与之耦合以array_map()首先选择该f_count列:

array_sum(array_map(function($item) { 
    return $item['f_count']; 
}, $arr));

当然,在内部,这会执行一个双循环。只是您在代码中看不到它。您可以array_reduce()用来摆脱一个循环:

array_reduce($arr, function(&$res, $item) {
    return $res + $item['f_count'];
}, 0);

但是,如果速度是唯一的利益,那么速度foreach仍然最快:

$sum = 0;
foreach ($arr as $item) {
    $sum += $item['f_count'];
}

这要归功于您使用的变量的“局部性”,即,没有用于计算最终总和的函数调用。

2020-05-17