Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]weryfikowanie zawartości treści w zmiennej
Forum PHP.pl > Forum > Przedszkole
bleze
Utworzyłem tablicę:
  1. <?php
  2. $array = array( "psa", "kota", "krowę");
  3. ?>

I zmienną $wer:
  1. <?php
  2. $wer = "Ala ma kota"
  3. ?>

I chciałbym teraz sprawdzić czy któryś z elementów z tablicy array występuje w łańcuchu zmiennej $wer. Jak to zrobić?
kefirek
Można tak
  1. <?php
  2. $array = array( "psa", "kota", "krowę");
  3. $wer = 'Ala ma kota';
  4.  
  5. $wyrazy = explode(" ", $wer);
  6.  
  7. $tab = array();
  8. foreach($wyrazy AS $element) {
  9. if(array_search($element,  $wyrazy)) { $tab[] = $element;}
  10. }
  11.  
  12. echo 'znalezione';
  13. foreach($tab AS $wynik) {
  14. echo $wynik.'<br>';
  15. }
  16. ?>
bleze
tylko dlaczego kiedy zmieniłem wartość $wer na:
  1. <?php
  2. $wer = 'Ala ma rybki';
  3. ?>

to otrzymałem:
"znalezionema
rybki"
o co może chodzić?
erix
~kefirek, nie wiem, czy wiesz, ale jeśli zaglądałeś do manuala, to pewnie zauważyłeś, że array_search" title="Zobacz w manualu PHP" target="_manual może zwrócić zero, które przy rzutowaniu na bool zwraca false. Stąd, jeśli szukana znajduje się na zerowej pozycji, to warunek nie jest spełniony, a powinien być.

  1. <?php
  2. $arr = array('psa', 'kota', 'krowę');
  3.  
  4. $str = 'Ala ma kota';
  5. $str = explode(' ', $str);
  6.  
  7. $found = array();
  8.  
  9. foreach($str as $x){
  10.   if(array_search($x, $arr)!==false){
  11.      $found[] = $x;
  12.   }
  13. }
  14. ?>
bleze
a jak zrobić żeby wyszukało również w łańcuchu $str czyli jeżeli zmienna $str zawiera 'Ala ma kota!' (wykrzyknik na końcu) to również warunek byłby spełniony (został znaleziony element z tablicy)
kefirek
Cytat(erix @ 16.01.2009, 22:18:40 ) *
~kefirek, nie wiem, czy wiesz, ale jeśli zaglądałeś do manuala, to pewnie zauważyłeś, że array_search" title="Zobacz w manualu PHP" target="_manual może zwrócić zero, które przy rzutowaniu na bool zwraca false. Stąd, jeśli szukana znajduje się na zerowej pozycji, to warunek nie jest spełniony, a powinien być.

  1. <?php
  2. $arr = array('psa', 'kota', 'krowę');
  3.  
  4. $str = 'Ala ma kota';
  5. $str = explode(' ', $str);
  6.  
  7. $found = array();
  8.  
  9. foreach($str as $x){
  10.  if(array_search($x, $arr)!==false){
  11.     $found[] = $x;
  12.  }
  13. }
  14. ?>




Oj bo się pomyliłem zdarza się
Powinno być tak działa na 100% i jak słowo zawiera wykrzyknik to także znajduje go


  1. <?php
  2. $array = array('psa', 'kota', 'krowę');
  3. $wer = 'Ala ma kota';
  4.  
  5. $wyrazy = explode(' ', $wer);
  6. $tab = array();
  7. foreach ($wyrazy AS $wynik) {
  8. if (in_array($wynik, $array)) { $tab[] = $wynik;}
  9. }
  10.  
  11. echo 'Znaleziownych '.count($tab).'<br>';
  12. foreach ($tab AS $znalezione) {
  13. echo $znalezione.'<br>';
  14. }
  15. ?>
erix
Ale to jest tak naprawdę ten sam kod. winksmiley.jpg Jedyną różnicą w porównaniu do array_search" title="Zobacz w manualu PHP" target="_manual jest zwracana wartość true/false.

Nie rozróżni Ci, czy jest wykrzyknik, czy nie, gdyż sprawdzany jest znak po znaku.
bleze
erix, substr" title="Zobacz w manualu PHP" target="_manual czy strpos" title="Zobacz w manualu PHP" target="_manual?
skrypt który podał kefirek nie znajduje słowa jeśli stoi przy nim np. wykrzyknik
Może da się to jakoś zrobić funkcją strpos" title="Zobacz w manualu PHP" target="_manual?
erix
substr" title="Zobacz w manualu PHP" target="_manual podałem dlatego, aby wycinać cały ciąg bez jednego znaku; nic nie wspomniałeś, że przy każdym słowie może stać znak.

Jeśli przy każdym, to wtedy robisz coś takiego: (zamiast tego kodu pętla)
  1. <?php
  2. if(array_search($x, $arr)!==false){
  3.     $found[] = $x;
  4.  }
  5. ?>

:
  1. <?php
  2. foreach($arr as $y){
  3.   if(strpos($x, $y)!==false){
  4.      $found[] = $x;
  5.      break;
  6.   }
  7. }
  8. ?>


pisane z palca
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.