2016-01-27 23 views
5

Kodumda for döngüsüm var. Kodun bu kısmındaki hiçbir şeyi 5-6 gün boyunca değiştirmedim ve bununla hiç problemim olmadı. Neden PHP kodum artık sebepsiz çalışmıyor?

yana dün kodumu yeniden çalıştı ve daima bana bu hata veriyor:

Maximum execution time of 30 seconds exceeded - in LogController.php line 270 

Eh neden açıklayamam ama belki sizin Birisinin görünebilir.

Bu ben mükemmel çalıştı, söylediği gibi çizgi 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(); 

etrafında kodum, neden bana bir hata veriyor? Bu satırları ve $ topten_sites dizisini içeren diğer tüm satırları rahatsız edersem, kod yeniden çalışır.

+1

şey Döngünüzden için, '$ i <= $ sites_array' kısmen garip. "$ I <= count ($ sites_array)" – PrinceG

+0

olmalıdır. @PrinceG ile aynı fikirdeyim - bunun bir "count ($ sites_dizisi)" veya "sizeof ($ sites_dizisi)" olarak değiştirilmesi gerekiyor – RamRaider

+0

FYI http://www.icosaedro.it/phplint/ bu hatayı yakaladı. –

cevap

15

Bu yanlış görünüyor: $sites_array bir dizidir

for ($i = 0; $i <= $sites_array; $i++) { 
     if ($i < 10) { // this is 270 
      $topten_sites[] = $sites_array[$i]; 
     } 
    } 

ise, muhtemelen hiç bitmeyen döngü var bu yüzden bir tamsayı karşılaştırmak için hiçbir mantıklı. Yalnızca ilk 10 sonuç istiyorsanız

$topten_sites = array_slice($sites_array, 0, 10); 
+0

Ya da işiniz bittiğinde döngüyü öldürmek için ara verin –

+1

daha iyisi. '$ i <10',' for' döngülerinin durumunu – roullie

+1

olarak kullanın. İyi .. Mükemmel çalıştı o.o Bunun için teşekkürler! Bu sorunun nasıl ortaya çıktığını bilmiyorum ama teşekkürler! – ItzMe42

2

Neden tüm dizi yineleme olacaktır: Eğer sadece başka bir dizide ilk 10 elemanları gerekiyorsa

, sen ile döngü değiştirebilirsiniz?

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

Gerçek cevabı yanıtlamak için; kod asla "nedensiz" çalışmayı durdurur. Kod çalışır ya da bir sebepten ötürü değildir. çalışmayı durdurursa, önceki testlerinizle karşılaştırıldığında bir şey değişmiştir. "Bazen çalışır, bazen olmaz" aynı mantığa düşer. Kod her zaman tam olarak aynı davranacaktır, sadece bazı parametreler değişti, hangisini bulmak zorundasınız.

Sizin durumunuzda, dizinizdeki girdilerin artmış olduğunu tahmin ediyorum. PHP ve diziler hız olduğunda en iyi arkadaşlar değildir, diziler yavaştır. Test ettiğinizde dizinizin kük olması çok iyi olabilir (başlangıçta en hızlı başlangıçta değil) ama şimdiki miktarla 30 saniyenin eşiğine ulaştı.

Ayrıca, bu kod bitmeden önce kodun bir kısmı çok fazla zaman alabilir (aniden 20 yerine 28 saniye) ve döngüsünüz (hiç değişmedi) her zaman normal 3 saniye içinde iş yapar yapar şimdi

0

böyle kullanın problemlere yol açmaktadır:

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

OP neden "bunu dene"?*** İyi cevaplar *** her zaman neyin yapıldığı ve niçin bu OP'nin sadece OP için değil, gelecekteki ziyaretçilere açıklanmasına dair bir açıklamaya sahip olacaktır. –