繁体   English   中英

如何使这些循环更快?

[英]How can I make these loops faster?

我正在为正在研究的项目使用PHP4。 我不得不扩展此代码(它对手头的数据足够快地工作):

for ($i = 1; $i <= count($arr); $i++) {
$a = $arr[$i]['date'];
    for ($y = 1; $y <= 10000000; $y++) {
      $c = $arr[$i]['data'][$y];
      // here I inserted another loop
    }
}

我在其中插入了另一个循环,如下所示:

for ($k = $i + 1; $k <= count($arr); $k++) {
    $next_is_empty = false;
    $next_is_null = false;
    if ($arr[$k]['data'][$y] == '') {
        $next_is_empty = true;
        break;
    } elsif (is_null($arr[$k]['data'][$y])) {
        $next_is_null = true;
        break;
    }
}

因为我是用内存编写的,所以代码更像是一个通用概念,而不是特定的工作代码。 但是,我认为我的问题足够准确。 因此,我插入的这个循环在大多数情况下都可以正常工作,但在某些情况下太慢了-我该如何加快速度? 我也基于此示例对性能的一般规则感到好奇。 我知道最好避免嵌套循环,但是例如为什么为什么如果我将变量$next_is_empty/null放在循环前面,代码就可以足够快地工作(那么解决方案是错误的,但是足够快)? 我知道需要进行更多的重新分配,但是他们为什么要花这么多时间?

不要在循环中使用count(),在不同的行中使用count(),然后在循环中使用变量

$count =  count($arr);
for ($i = 1; $i <= $count; $i++) {
$a = $arr[i]['date'];
    for ($y = 1; $y <= 10000000; $y++) {
      $c = $arr[i]['data'][y];
      // here I inserted another loop
    }
}

这样有更好的基准测试结果

就在循环外定义变量$ next_is_empty而言,据我所知,这很难回答,这取决于您使用的PHP版本,但最好放在外面,那就是原始的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM