3 回答
TA贡献1770条经验 获得超3个赞
您需要将其与之耦合以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'];
}
这要归功于您使用的变量的“局部性”,即,没有用于计算最终总和的函数调用。
TA贡献1797条经验 获得超4个赞
另外,如果有一种方法可以不同地运行我的查询,使得数组不是多维的,那显然也可以。
$query = "SELECT f_count, uid FROM users WHERE gid=:gid";
...
$array = $stmt->fetchAll();
我正在使用PDO。
是的,还有另一种方式可以不同地运行查询。您可以使用聚合函数直接在查询中SUM获取所有f_count直接和的总和。您可以将其与组合$stmt->fetchColumn()以获取第一行(由于我们使用了聚合函数,因此它将是唯一的行)的第一列的值(即总和)。
以下是如何执行此操作的示例:
$query = "SELECT SUM(f_count) FROM users WHERE gid=:gid";
$stmt = $pdo->prepare($query);
$stmt->execute(array(':gid' => 'yoursearchvalue'));
$sum = $stmt->fetchColumn();
TA贡献1804条经验 获得超3个赞
对于这种情况,foreach循环是最好的选择,但如果您必须在单个页面上多次执行此操作,则应将foreach循环放入函数中,以使您的代码保持干净
function sum_index($arr, $col_name){
$sum = 0;
foreach ($arr as $item) {
$sum += $item[$col_name];
}
return $sum;
}
编辑
经过大量搜索后,我发现该array_column函数存在于php 5.5 +中,以获取单列的所有值作为数组。
对于较低版本的用户,如果您还希望所有值的总和,则可以使用以下函数,并使用数组和调用它。
//to get all values of single column from multidimensional array, this function exist in php 5.5 or greater.
if(!function_exists("array_column"))
{
function array_column($array,$column_name)
{
return array_map(function($element) use($column_name){return $element[$column_name];}, $array);
}
}
如果要获取单列的所有值,请按以下方式调用上述函数:
$newArray = array_column($array,$column_name);
如果要对单个列的所有值求和,请使用以下代码:
$newArraySum = array_sum(array_column($array,$column_name));
添加回答
举报