Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Pętla while(), czas przekroczony
swiru_
post
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 1.10.2009

Ostrzeżenie: (0%)
-----


Witam,

Chce podzielic zdanie na dwie linijki, zalozmy ze jedna litera to 13px, maksymalna dlugosc to 590px, zdanie zlozone z 12 wyrazow lacznie zajmuje szerokosc 940px.

Trzy petle: petla1 -> wykona sie tyle razy ile razy zostanie podzielone zdanie 940px / 590px = 2,
pętla2 -> wykona sie tyle razy ile jest slow 12
pętla3 -> wykona sie dopoki laczna suma pikseli nie bedzie wieksza od 590, jezeli suma jest wieksza, zatrzymaj petle, wykonaj petle2 jeszcze raz i kontynuuj petle3 od zatrzymanego wyrazu...

No to tyle jesli chodzi o opis ;]

Wyklepalem cos takiego:

  1. <?php
  2.  
  3. $text = 'Kilka słów w zdaniu które muszą pixelowo zajmować więcej niż określone maxpx';
  4. $znakow = strlen($text);
  5.  
  6. $zdanie = explode(' ', $text);
  7. $slowa = array();
  8.  
  9. foreach ($zdanie as $str)
  10. {
  11. $slowo = preg_replace('#[^a-zęóąśłżźćń]+#i', '', $str);
  12. if(mb_strlen($slowo) > 0)
  13. {
  14. $slowa[] = $slowo;
  15. }
  16. }
  17.  
  18. $wyrazow = count($slowa);
  19. $px = 0;
  20. $litera = 13;
  21. $nr_slowa = 0;
  22. while($nr_slowa < $wyrazow) // potrzebne do wyliczenia ilosci linijek
  23. {
  24. $px = (strlen($slowa[$nr_slowa]) * $litera) + $px;
  25. $nr_slowa++;
  26. }
  27.  
  28.  
  29. $maxpx = 590;
  30. $ilosc_linijek = ceil($px / $maxpx);
  31. $i = 0;
  32. while ($i < $ilosc_linijek) //w tym przypadku wykona sie dwa razy
  33. {
  34. $wyrazow = count($slowa);
  35. $nr_slowa = 0;
  36. $litera = 13;
  37. $px = 0;
  38. while($nr_slowa < $wyrazow)
  39. {
  40. echo '</br>';
  41. $px = 0;
  42. do
  43. {
  44. echo ''.$slowa[$nr_slowa].' ';
  45. $px = (strlen($slowa[$nr_slowa]) * $litera) + $px;
  46. $nr_slowa++;
  47. }
  48. while($px < $maxpx);
  49. }
  50. $i++;
  51. }
  52.  
  53. ?>


Teoretycznie dziala, ale po wykonaniu wywali mi blad:

Fatal error: Maximum execution time of 30 seconds exceeded in (...) on line 48

I nie mam pojecia dla czego ;]
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Twoje rozwiazanie tez wywala przekroczony czas...
Jakie moje rozwiązanie? Ja ci nie podawałem żadnego rozwiązania. Ja ci podałem gdzie robisz błąd.

@lDoran yyyy.....? Pętla się zapętla a ty jako tego rozwiązanie dajesz zwiększenie czasu wykonywania skryptu? Po Twoim rozwiązaniu skrypt się wywali po godzinie zamiast po 30 sekundach. Toć lepiej czekać 30 sekund niż godzinę na stwierdzenie, że pętla się zapetla.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 30.09.2025 - 20:13