gpt4 book ai didi

php - 从数组中选择每第 n 个项目

转载 作者:IT王子 更新时间:2023-10-29 00:01:28 24 4
gpt4 key购买 nike

从大型数组中选择每第 n 项的最有效方法是什么?是否有一种“聪明”的方法来做到这一点,或者循环是唯一的方法?

需要考虑的几点:

  • 数组非常大,有 130 000 个项目
  • 我必须选择每第 205 个项目
  • 这些项目没有数字索引,所以 for($i = 0; $i <= 130000; $i += 205)行不通

到目前为止,这是我想出的最有效的方法:

$result = array();
$i = 0;
foreach($source as $value) {

if($i >= 205) {
$i = 0;
}

if($i == 0) {
$result[] = $value;
}

$i++;
}

或者同取模:

$result = array();
$i = 0;
foreach($source as $value) {
if($i % 205 == 0) {
$result[] = $value;
}
$i++;
}

这些方法可能会很慢,有什么方法可以改进吗?还是我只是在这里吹毛求疵?

编辑

到处都是好的答案,并有适当的解释,试图选择最合适的答案作为接受的答案。谢谢!

最佳答案

根据比较测试,foreach 循环可在大型数组上提供最快的迭代。除非有人希望通过循环展开解决问题,否则我会坚持使用与您所拥有的类似的东西。

这个答案应该运行得更快。

$result = array();
$i = 0;
foreach($source as $value) {
if ($i++ % 205 == 0) {
$result[] = $value;
}
}

我没有时间进行测试,但如果您首先对数组进行数字索引,则可以使用@haim 解决方案的变体。值得尝试看看您是否可以从我以前的解决方案中获得任何 yield :

$result = array();
$source = array_values($source);
$count = count($source);
for($i = 0; $i < $count; $i += 205) {
$result[] = $source[$i];
}

这在很大程度上取决于函数 array_values 的优化程度。它可能表现得非常糟糕。

关于php - 从数组中选择每第 n 个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1939581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com