为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕的地10843 2019-11-02 13:24:11
我有这个: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_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();我正在使用PDO。
查看完整描述

3 回答

?
德玛西亚99

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'];

}

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


查看完整回答
反对 回复 2019-11-02
?
繁星coding

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();


查看完整回答
反对 回复 2019-11-02
?
狐的传说

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));


查看完整回答
反对 回复 2019-11-02
  • 3 回答
  • 0 关注
  • 346 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信