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

问题描述 投票:0回答:4

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

php for-loop
4个回答
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);

2
投票

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

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

1
投票

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

就您而言,我猜测数组中的条目已经增加。就速度而言,PHP 和数组并不是最好的朋友,数组很慢。很可能你的数组是 当你测试它时较小(一开始可能不是最快的),但现在以当前的数量,它刚刚达到 30 秒的阈值。

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


0
投票

像这样使用它:

    $topten_sites = [];
    for ($i = 0; $i <= 10; $i++) {
        $topten_sites[] = $sites_array[$i];
    }
    $topten_sites = collect($topten_sites)->sortByDesc('number')->all();
© www.soinside.com 2019 - 2024. All rights reserved.