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

Posty w temacie


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

 



RSS Aktualny czas: 21.08.2025 - 22:37