簡體   English   中英

為什么我的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];
    }

回答實際答案; 代碼永遠不會“無緣無故”停止工作。 代碼有效或無效,兩者都有原因。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM