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 "...".
function skrot($text="", $ile=10){ if($pos===true){ // tu problem: za każdym razem idzie w 'else' tzn. warunek nie jest spełniony $text=substr($text,0,$pos)." ..."; //nowy $text jest fragmentem do ostatniej spacji poniżej $ile znaku. Doklejam '...' } else { $text=substr((string)$text,0,(int)$ile)." ..."; //nie znalazł żadnej spacji zatem nowy $text jest fragmentem $ile znaków. Doklejam '...' } return $text; }
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:
$spr=(bool)$pos; if($spr===true){ } 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?