当前位置: 首页 > 面试题库 >

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

郜俊晤
2023-03-14
问题内容

我有这个:

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。


问题答案:

您需要将其与之耦合以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'];
}

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



 类似资料:
  • 并分别处理这两个数组。这是更好的解决方案吗?

  • 例如,我有一个这样的数组 但输出只有11、12、13、14、15。我想打印所有的值。有人能帮我修改一下吗?提前谢谢

  • 问题内容: 我有一个这样的多维数组: 我想这样的html输出: - 活动1 艺术家1 艺术家1 desc http : //www.artist1.com,http://www.artist1-2.com ARTIST 8 artist 8 desc http://www.artist8.com ARTIST 5 artist 5 desc http://www.artist5.com - 活动2

  • 我试图弄清楚嵌套for循环是如何与JavaScipt中的多维数组一起工作的,但有一点让我有些困惑。以股票为例 这就是我所期望的结果123456。但是,如果我将数字添加到外部数组的末尾: 我仍然得到同样的输出1 2 3 4 5 6?我不明白为什么 输出是一个bcdyz,这是我所期望的。为什么字符串的行为会有所不同?

  • 问题内容: 假设我有以下多维数组(从MySQL或服务检索): 我们可以在一个“ 内置 ” php函数调用中获得一组s 吗?或一行代码? 我知道传统的循环并获得价值,但是我不需要这个: 也许有些和可以做的魔力。 问题答案: 从php 5.5开始,您可以使用: 这是任何现代项目的首选选项。但是,如果必须支持php <5.5,则存在以下替代方法: 从php 5.3开始,您可以使用匿名函数,如下所示: 在

  • 所以我想看看有没有办法循环这些数组,看看哪一个与main函数中提供的{6,1,1,6,3,1,4,7,7,1}的数组匹配。