Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [skrypt][ocena] przenoszenie przyimków do nowej linii
Forum PHP.pl > Inne > Oceny
bogdan89
Witam, postanowiłem do oceny oddać moją, napisaną przed chwilą funkcję, której zadaniem jest przenoszenie do nowej linii przyimków.

Od razu powiem dlaczego nie zastosowałem "twardej spacji".
Otóż, przy justify, twarda spacja wygląda nieładnie, tzn. poszczególne wyrazy są w nierównych odległościach od siebie.

Wiem, że funkcja jest bardzo prosta, ale mam nadzieję, że ktoś znajdzie chwilę, żeby podpowiedzieć jak ją udoskonalić, no i czy w ogóle dobrze rozumuję, jeśli chodzi o to zagadnienie. Wcześniej nie było mi to potrzebne winksmiley.jpg

  1. <?php
  2. function pp_to_new_line($text) {
  3. //tablica z przyimkami, które należy przenosić do nowej linii
  4. $pp = array(
  5. 'i', 'do', 'z', 'po', 'w', 'na' // itp...
  6. );
  7.  
  8. $words = explode(' ', $text);
  9.  
  10. for($i=0; $i<count($words); $i++) {
  11. $words[$i]=' '.$words[$i].' ';
  12. if($i==0) { $words[$i] = ltrim($words[$i]); }
  13. if($i==(count($words)-1)) { $words[$i] = rtrim($words[$i]); }
  14. }
  15.  
  16. for($i=0; $i<count($pp); $i++) {
  17. $pp[$i]=' '.$pp[$i].' ';
  18. }
  19.  
  20. $c=0;
  21. $i=0;
  22. foreach($words as $word) {
  23. if ($c == 0) {
  24. if(in_array($word, $pp)) {
  25. $c=1;
  26. $words[$i] = '<font style="white-space: nowrap;">'.trim($word);
  27. }
  28. }
  29. if ($c == 1) {
  30. if(!(in_array($word, $pp))) {
  31. $c=0;
  32. $words[$i] = trim($word).'</font>';
  33. }
  34. }
  35. $words[$i]=trim($words[$i]);
  36. $i++;
  37. }
  38.  
  39. return implode(' ', $words);
  40. }
  41.  
  42. echo pp_to_new_line('Adam i Ewa poszli razem do kina na film, po popcorn i po coca-colę.');
  43.  
  44. ?>
Pawel_W
ekhm, może zgaszę Twój zapał, ale ja zrobiłbym to tak:
  1. function pp_to_new_line($text)
  2. {
  3. $pp = array(
  4. ' i ', ' do ', ' z ', ' po ', ' w ', ' na ' // itp...
  5. );
  6. $to_pp = array(
  7. ' i&nbsp;', ' do&nbsp;', ' z&nbsp;', ' po&nbsp;', ' w&nbsp;', ' na&nbsp;' // itp...
  8. );
  9. return str_replace($pp, $to_pp, $text);
  10. }


winksmiley.jpg
bogdan89
Cytat(Pawel_W @ 11.09.2009, 18:45:10 ) *
ekhm, może zgaszę Twój zapał

gasząc Twój entuzjazm proponuję przeczytać mojego posta ze zrozumieniem!
takie rozwiązania stosowałem dla strony mojej klasy, będąc w pierwszej klasie gimnazjum.

Obawiam się, że moje zamiary nadal są niezrozumiałe. Przedstawię więc problem na rysunku:
bim2
Hmm, wydaje mi się że zwykły preg_replace tutaj by starczył :]

  1. preg_replace('#(do|i)$#i', '$1&nbsp;', $txt);

Choć nie sprawdzałem i moge się mylić smile.gif
bogdan89
co_jest.gif no comments! tiredsmiley.gif sciana.gif

dobra nie ważne biggrin.gif ważne, że uzyskałem to co ja chciałem uzyskać biggrin.gif
bim2
Ahh, fax paus (tak to się pisało tongue.gif )

Nie pomyślałem do końca smile.gif Choć wordwrap i to można kombinować ;]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.