Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak sprawdzić czy zmienna zawiera dane słowo?
Forum PHP.pl > Forum > PHP
Obszczymur
witam,

mam taką zmienną:

  1. $kto = 'olek,bartek,maciej,ola,natalia,dagmara';


jak sprawdzić czy zmienna $kto zawiera słowo 'ola'?
Szymciosek
  1. $kto = 'olek,bartek,maciej,ola,natalia,dagmara';
  2.  
  3. $szukany = strpos($kto, 'asd');
  4.  
  5. if ($szukany)
  6. {
  7. echo 'znaleziono';
  8. }
  9. else
  10. {
  11. echo 'nie znaleziono';
  12. }
Obszczymur
dzięki wielkie, tylko co gdy zmienną $kto pobieram z tablicy $row['kto'] (z bazy danych)
wtedy juz ten kod nie chce dzialac
IceManSpy
http://php.net/manual/en/function.in-array.php
Pawel_W
strpos zwróci 0 jeżeli dla powyższego stringu szukałbyś "olek", wynik powinno się sprawdzać tak:
  1. if(strpos($kto, 'asd') !== false){
  2. echo 'znaleziono';
  3. } else {
  4. echo 'nie znaleziono';
  5. }
SeaDog
a nie lepiej to potraktować wyrażeniem regularnym preg_match?

  1. if(preg_match('/^ola$'/, $row['kto'])) { echo"Ola żyje"; } else { echo"Ola is dead"; }
Pawel_W
Cytat(SeaDog @ 25.11.2012, 16:44:49 ) *
a nie lepiej to potraktować wyrażeniem regularnym preg_match?

  1. if(preg_match('/^ola$'/, $row['kto'])) { echo"Ola żyje"; } else { echo"Ola is dead"; }

po co? raz, że więcej kodu, dwa, że wyrażenia regularne są zasobożerne
thek
Pytanie... ola ma być jako całość, czy fragment? Bo wiesz, że zawsze możesz mieć w ciągu przykładowo: mariola. Wtedy strpos też Ci go znajdzie, a nie zawsze jest to pożądane działanie. Jeśli masz taką strukturę, to myślę, że bezpieczniejsze będzie explode po przecinku i potem in_array. Jeśli chesz się "bawić" bez konwersji do tablicy i koniecznie działać na stringu, to musisz rozpatrzyć 3 przypadki umiejscowienia ciągu: na początku czyli w postaci: "ola,", na końcu czyli: ",ola" oraz w środku: ",ola," i dopiero te 3 warunki graniczne sprawdzone dają Ci odpowiedź. Sam oceń co jest prostsze wink.gif
markonix
thek, Twoje rozwiązanie bym zmienił bym tak, że do stringa dodałbym na początek i koniec przecinek i wtedy wystarczy szukać ",ola," smile.gif
Brzydko by wyglądało ale przynajmniej jedno szukanie zamiast trzech.
thek
Tylko chciałem wskazać na co ma zwrócić autor uwagę przy przeszukiwaniu niż podrzucać jakąś konkretną implementację. Można oczywiście dołożyć przecinki (jak wspomniałeś) i jest to jakieś podejście do problemu. Myślę, że wydajniejsze to może być niż wyrażenie regularne (proste operacje stringowe są z reguły przynajmniej nieco wydajniejsze niż preg) i na pewno prostsze. Ale czy w przyszłości wygodne i proste w konserwacji? Tu już można polemizować. Co do wyrażenia zaś podanego w wątku, to gratuluję jego autorowi... Każdy nieco siedzący w tej materii, gdy poparzy na nie, a potem na ciąg przykładowy od razu powie, że da błędny wynik. I nie chodzi tu nawet o syntax error. Po prostu ograniczono ciąg zarówno z góry jak i dołu. Ten preg da prawdę tylko i wyłącznie, gdy ciąg wejściowy będzie zgodny z wzorcem wyrażenia, czyli innymi słowy tylko gdy $kto = 'ola' smile.gif
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.