[英]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];
}
回答實際答案; 代碼永遠不會“無緣無故”停止工作。 代碼有效或無效,兩者都有原因。 changed compared to your previous tests. 如果它停止工作,與之前的測試相比發生變化。 “有時候它有效,有時它不會”落入同樣的邏輯。 每次代碼總是表現完全相同,只是一些參數已經改變,你必須找到哪一個。
在你的情況下,我猜你的陣列中的條目已經增加。 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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.