为什么我的PHP代码无缘无故地不再工作了


Why does my PHP code doesn't work anymore for no reason?

我的代码中有一个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 数组的所有其他行,代码将再次工作。

看起来是错误的:

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

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

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

回答实际答案;代码永远不会"无缘无故"地停止工作。代码有效或无效,都是有原因的。如果它停止工作,则与您之前的测试相比,某些内容发生了变化。"有时有效,有时无效"也符合同样的逻辑。代码每次的行为总是完全相同,只是一些参数发生了变化,你必须找到哪一个。

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

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

像这样使用它:

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