Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Dlaczego wchodzi w petle if
Forum PHP.pl > Forum > Przedszkole
Wolfie
Witam,


Mam taka funkcje ktora obcina string :

  1. function truncate($string, $length, $break = "...") {
  2. $len = strlen($string);
  3. if ($len > $length) {
  4. $pos = strpos($string, " ", $length);
  5. return substr($string, 0, $pos) . $break;
  6. } else {
  7. return $string;
  8. }
  9. }


Problem polega na tym ze jesli okresle $length np na 25 to jesli string bedzie krotszy niz $length to zwraca mi tylko '...' zamiast calego stringu, tak jakby za kazdym razem niezalenie od warunku wchodzil w if($len > $length)
Poprostu jesli $len < $length to zamiast zwrocic $string zwraca mi $break czyli '...'

Gdzie tutaj jest blad bo ja nie moge go znalezc...
Ociu
A przypadkiem nie chcesz napisać takiej funkcji: wordwrap?
Wiktor P.
  1. function truncate($string, $length, $znak, $break = "...") {
  2.  
  3.  
  4. $len = strlen($string);
  5.  
  6.  
  7. if ($len > $length) {
  8. $pos = stripos($string, $znak, $length);
  9.  
  10. #echo $pos;
  11. #echo gettype($pos);
  12.  
  13. $g1 = substr($string, 0, $pos);
  14. $g .= $break;
  15. $g = $g1.$g2;
  16.  
  17. return $g;
  18.  
  19. }
  20.  
  21. else
  22. {
  23. return $string;
  24. }
  25.  
  26. }
  27.  
  28.  
  29. echo truncate("abcdefgh", 4, "h");
  30.  


Sorki, że trochę namieszałem w twoim kodzie, ale pewnie dasz sobie radę.
Zmienn± $pos otrzymywałe¶ jako boolean, a nie jako integer. Interpreter więc zgłupiał.
Zmianna $znak może być zamieniona oczywi¶cie na wczesniejsz± spację.

Jak bardzo ci przeszkadza, że trchę pozmieniałem to napisz. Pod wieczór to przerobię.

pzdr
Wolfie
Wiktor, nie wiem co Ty narobiles ale przeciez to jest to samo co moja funkcja, dzialanie to samo,

zamiast :

  1. echo truncate("abcdefgh", 4, "h");


Zrob sobie
  1. echo truncate("abc", 4, "h");


I zobacz co sie stanie, wlasnie o to chodzi.....i wcale nie bedzie dzialac poprawnie....
Wiktor P.
Chciałem ci pokazać, że je¶li funkcja strpos(), albo lepiej stripos() nie znajdzie w łańcuchu argumentu, który podałe¶ jako drugi, zwróci false.
Ty przecież potrzebujesz do substr zmienn± typu integer.
Co ci przyjdzie z substr(string, int, boolean) questionmark.gif?
Na pewno jaki¶ bł±d.

Zreszt± mi ten twój skrypt działa.
  1. echo truncate1("Jaki¶ tekst", 2);
  2. echo truncate1("Jaki¶ tekst", 25);

Zwracaj± wyniki:

Jaki¶..
Jaki¶ tekst
Wolfie
No wlasnie bo on powinien dzialac a mi nie dziala i w tym problem , nie widze bledu a jesli ciag jest krotszy niz $lenght to zwraca mi tylko $break = '...'  - .....ktos wie gdzie moze byc problem ?
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.