Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Operator identyczności "===", Operator identyczności nie działa. Ktoś pomoże?
wojcup
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 16.01.2012

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


Jestem tu nowy zatem jeśli coś jest nie tak proszę o wyrozumiałość i rzeczowe uwagi.

Problem:
Prosta funkcja: dostaje 2 wartości (tekst oraz ilość znaków). Chcę aby w zadanym fragmencie tekstu np 35 znaków znalazł ostatnią spację i tekst od początku do ostatniej spacji wyświetlił razem z "...".


  1. function skrot($text="", $ile=10){
  2.  
  3.         $pos=strrpos(substr((string)$text,0,(int)$ile), ' '); // najpierw skracam $text do 30 znaków i szukam w nim ostatniej spacji, konwertuje przy tym zmienne $text-> string a $ile -> int. Dostaję położenie ostatniej spacji (ale mniejsze niż zadana liczba)
  4.  
  5.  if($pos===true){           // tu problem: za każdym razem idzie w 'else' tzn. warunek nie jest spełniony
  6.  
  7.         $text=substr($text,0,$pos)." ..."; //nowy $text jest fragmentem do ostatniej spacji poniżej $ile znaku. Doklejam '...'
  8.         } else {
  9.         $text=substr((string)$text,0,(int)$ile)." ..."; //nie znalazł żadnej spacji zatem nowy $text jest fragmentem $ile znaków. Doklejam '...'
  10.         echo "było false"; // a to takie pomocnicze, żebym wiedział co się działo :)
  11.         }
  12.         return $text;
  13. }



Zgodnie z manualem na php.net powinno zadziałać w takiej formie. Niestety tak jak napisałem warunek nie waliduje się, mimo, iż podaję prawidłowe wartości (jakiś tekst ze spacjami i wartość $ile taką, że znajdzie spację). Co więcej przy prawidłowych wartościach w sekcji 'else ...' jak dam var_dump($pos) wyskoczy mi że $pos jest np. int (28).
Po dłubaniach doszedłem do wniosku, że $pos dostaje wartość np. 28 i wtedy nijak nie sprawdzi warunku $pos===true, bo true jest typu boolean (0 lub 1). Jedynym rozwiązaniem wydaje mi się kruczek:
  1. $spr=(bool)$pos;
  2. if($spr===true){
  3. $text=substr($text,0,$pos)." ...";
  4. } else ....

czyli wstawiłem dodatkową zmienną $spr, która dostaje wartość z $pos i przerabiam ją na boolean. Mogę sobie teraz sprawdzić $spr (identyczne z $pos). Jeśli ona jest true to reszta pozostaje bez zmian.
Prośba do Was, drodzy forumowicze: czy jest lepsze rozwiązanie?

Ten post edytował wojcup 26.05.2013, 22:40:47
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wojcup
post
Post #2





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 16.01.2012

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


Dla potomności. Tak wygląda kompletna funkcja:
  1. function skrot($text, $ile){
  2. if(!isset($ile)||$ile=='') {$ile=(int)30;} // dodałem linię sprawdzającą czy $ile nie jest puste, jeśli tak, to przydziela 30
  3. /* var_dump($text, $ile); */
  4. $pos=strrpos(substr((string)$text,0,(int)$ile), ' ');
  5.  
  6. if($pos!==false){
  7. $text=substr($text,0,$pos)." ...";
  8. } else {
  9. $text=substr((string)$text,0,(int)$ile)." ...";
  10. }
  11. return $text;
  12. }


ziqzaq - wywołuję funkcję przez:
  1. echo skrot($text, $ile);


bo kiedy dawałem samo skrot($text, $ile) nic nie wypisywał.
Kiedy spróbowałem Twojej funkcji (oczywiście wcześniej w formularzu nie podawałem nic dla $ile, tylko wpisałem coś dla $text) dla zmiennej $text ładnie wypisał to, co tam podałem ale dla $ile wyskoczyło tylko string(0) "" . Nie wiem, co sprawia, że nie przyjmuje wartości domyślnej.

Ten post edytował wojcup 27.05.2013, 08:51:26
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: 11.10.2025 - 12:28