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

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 - 04:34