Dav*_*vid 29 php mysql arrays multidimensional-array
我有这个:
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 )
)
Run Code Online (Sandbox Code Playgroud)
我需要的是:7
",这是f_count
列的总和.
我一直试图弄清楚这几个小时.我认为array_sum()
会工作,但不是多维数组.所以,我已经尝试弄清楚如何f_count
通过unset()
拼接或其他任何方式来隔离它,但每个解决方案似乎都涉及一个foreach
循环.我搞砸了array_map
,array_walk
和其他人一样无济于事.我还没有找到一个适用于多维数组的函数.
我正在运行PHP 5.4.
有人可以告诉我如何在没有foreach
循环的情况下对该列进行求和吗?
如果它有帮助,则f_count
值永远不会高于100
,并且uid
值将始终大于100
.
或者,如果有一种方法以不同方式运行我的查询,使得数组不是多维的,那么显然也可以.
$query = "SELECT f_count, uid FROM users WHERE gid=:gid";
...
$array = $stmt->fetchAll();
Run Code Online (Sandbox Code Playgroud)
我正在使用PDO.
Ant*_*ley 75
在PHP 5.5+中你可以使用array_column
并array_sum
喜欢这样:
$value = array_sum(array_column($arr,'f_count'));
Run Code Online (Sandbox Code Playgroud)
Ja͢*_*͢ck 67
您需要将其与之array_map()
匹配以f_count
首先选择列:
array_sum(array_map(function($item) {
return $item['f_count'];
}, $arr));
Run Code Online (Sandbox Code Playgroud)
当然,在内部,这会执行双循环; 只是你没有在代码中看到它.你可以array_reduce()
用来摆脱一个循环:
array_reduce($arr, function(&$res, $item) {
return $res + $item['f_count'];
}, 0);
Run Code Online (Sandbox Code Playgroud)
但是,如果速度是唯一的兴趣,foreach
仍然是最快的:
$sum = 0;
foreach ($arr as $item) {
$sum += $item['f_count'];
}
Run Code Online (Sandbox Code Playgroud)
这要归功于您正在使用的变量的"局部性",即没有用于计算最终总和的函数调用.