我的代码中有一个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数组的每个其他行,代码将再次运行。
答案 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();