为什么我的PHP代码不再无缘无故了?

时间:2016-01-27 09:12:24

标签: php for-loop

我的代码中有一个for循环。我在这段代码上没有改变任何东西大约5-6天,我从来没有遇到任何问题。

从昨天开始,我尝试重新加载我的代码,它总是给我这个错误:

Maximum execution time of 30 seconds exceeded - in LogController.php line 270

嗯,我无法解释为什么,但也许有人可以看一下。

这是我在第270行附近的代码。

$topten_sites = [];
for ($i = 0; $i <= count($sites_array); $i++) {
    if ($i < 10) { // this is 270
        $topten_sites[] = $sites_array[$i];
    }
}
$topten_sites = collect($topten_sites)->sortByDesc('number')->all();

正如我所说,它完美无缺,为什么它会给我一个错误?如果我取消注释这些行以及包含$ topten_sites数组的每个其他行,代码将再次运行。

4 个答案:

答案 0 :(得分:15)

这看起来不对:

    for ($i = 0; $i <= $sites_array; $i++) {
        if ($i < 10) { // this is 270
            $topten_sites[] = $sites_array[$i];
        }
    }

如果$sites_array是一个数组,将它与一个整数进行比较是没有意义的,所以你可能有一个永无止境的循环。

如果你只需要另一个数组中的前10个元素,你可以用以下代码替换你的循环:

$topten_sites = array_slice($sites_array, 0, 10);

答案 1 :(得分:2)

如果您只需要前10个结果,为什么要迭代整个数组?

    for ($i = 0; $i < 10; $i++) {
            $topten_sites[] = $sites_array[$i];
    }

答案 2 :(得分:1)

回答实际答案;代码永远不会“无缘无故”停止工作。代码有效或无效,两者都有原因。如果它停止工作 某些 与之前的测试相比发生了变化。 “有时候它有效,有时它不会”落入同样的逻辑。代码每次都会表现完全相同,只是一些参数已经改变,你必须找到哪一个。

在你的情况下,我猜你的数组中的条目已经增加。 PHP和数组在速度方面不是最好的朋友,数组很慢。很可能你的阵列是 当你测试它时它是较小的(开始时不是最快的),但现在使用当前的数量它只是达到了30秒的阈值。

也可能是这段代码之前的代码的一部分需要花费很多时间(比如突然28秒而不是20秒),而你的循环(从未改变过)会在常规的3秒内完成它的工作总是这样,现在遇到问题

答案 3 :(得分:0)

像这样使用:

    $topten_sites = [];
    for ($i = 0; $i <= 10; $i++) {
        $topten_sites[] = $sites_array[$i];
    }
    $topten_sites = collect($topten_sites)->sortByDesc('number')->all();