Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Funkcja filtrująca przekleństwa (problem)
Forum PHP.pl > Forum > Przedszkole
Fabian
Cześć wink.gif
mam taką prościutką funkcję:
  1. function check_bad_words($text){
  2. $open = file('data/bad-words.txt');
  3. foreach($open as $value){
  4. $find = strpos($text, $value);
  5. if($find === true){
  6. return true;
  7. }
  8. }
  9. return false;
  10. }

wywołuję ją tak:
  1. if(check_bad_words($question)){
  2. // coś tam coś
  3. }

Niby wszytsko ładnie prosto... Ale nie działa tongue.gif
Funkcja za każdym razem zwraca false, anwet wtedy kiedy podaję tekst z przekleństwem będącym w pliku bad-words.txt.
Ktoś ma pomysł, dlaczegoż to nie chce działać ;/ ?
vonski
Dlatego, że strpos zwraca pozycję danego substringu, lub FALSE. Dlatego $find === true nigdy nie będzie miało wartości logicznej true.
Możesz ten warunek przepisać tak:

  1. if($find === false) {
  2. return false;
  3. }


A po wyjściu z pętli zwracasz true.
jakub.drag
Cytat(vonski @ 3.03.2014, 01:53:28 ) *
Dlatego, że strpos zwraca pozycję danego substringu, lub FALSE. Dlatego $find === true nigdy nie będzie miało wartości logicznej true.
Możesz ten warunek przepisać tak:

  1. if($find === false) {
  2. return false;
  3. }


A po wyjściu z pętli zwracasz true.

Cześć wink.gif
@vonski - zapomniałeś, że PHP rzutuje typy zmiennych. Skoro $find przybiera integer'a, a porównujemy go do boola, to jest on rzutowany na bool'a. A dokładniej na true smile.gif
Co do funkcji @Fabian - wydaje być poprawna... Przetestuję i zobaczę smile.gif
vonski
PHP rzutuje typy przy porównaniu za pomocą tego operatora: ==
Operator identyczności (===) porównuje wartość i typ - bez rzutowania.
nospor
Tak czy siak kod powinien wygladac tak:
if($find !== false) {
return true;
}

wink.gif
Fabian
Nie wiem ale to dalej nie działa. I z poprawkami nospora i jakuba. Ja już nie wiem co jest nie tak!!
jakub.drag
No tak. To nie jest kwestia rzutowania czy warunków.
Funkcja file() zwraca wiersze w tablicy, ale ze znakiem nowej lini.
Użyj trim() i powinno działać.
Fabian
Dobra z trimem zadziałało, dzieki
viking
file() ma coś takiego jak flagi. Dokumentacja się kłania.
FILE_IGNORE_NEW_LINES
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.