Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Dlaczego wchodzi w petle if, jesli warunek nie jest spelniony
Wolfie
post 8.10.2009, 16:32:37
Post #1





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


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...
Go to the top of the page
+Quote Post
Ociu
post 8.10.2009, 17:13:29
Post #2





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




A przypadkiem nie chcesz napisać takiej funkcji: wordwrap?
Go to the top of the page
+Quote Post
Wiktor P.
post 8.10.2009, 17:36:14
Post #3





Grupa: Zarejestrowani
Postów: 80
Pomógł: 9
Dołączył: 14.09.2009

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


  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
Go to the top of the page
+Quote Post
Wolfie
post 8.10.2009, 17:52:54
Post #4





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


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....

Ten post edytował Wolfie 8.10.2009, 17:54:18
Go to the top of the page
+Quote Post
Wiktor P.
post 8.10.2009, 18:07:40
Post #5





Grupa: Zarejestrowani
Postów: 80
Pomógł: 9
Dołączył: 14.09.2009

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


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


Ten post edytował Wiktor P. 8.10.2009, 20:12:44
Go to the top of the page
+Quote Post
Wolfie
post 8.10.2009, 20:37:02
Post #6





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


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 ?
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:49