Utilizzo di un arrays come aghi in strpos

Come si usa la strpos per una serie di aghi durante la ricerca di una string? Per esempio:

 $find_letters = arrays('a', 'c', 'd'); $string = 'abcdefg'; if(strpos($string, $find_letters) !== false) { echo 'All the letters are found in the string!'; } 

Perché quando si utilizza questo, non functionrebbe, sarebbe bello se ci fosse qualcosa di simile

@Dave uno snippet aggiornato da http://www.php.net/manual/en/function.strpos.php#107351

 function strposa($haystack, $needles=arrays(), $offset=0) { $chr = arrays(); foreach($needles as $needle) { $res = strpos($haystack, $needle, $offset); if ($res !== false) $chr[$needle] = $res; } if(empty($chr)) return false; return min($chr); } 

Come usare:

 $string = 'Whis string contains word "cheese" and "tea".'; $arrays = arrays('burger', 'melon', 'cheese', 'milk'); if (strposa($string, $arrays, 1)) { echo 'true'; } else { echo 'false'; } 

restituirà true , a causa della arrays "cheese" .

Aggiornamento: codice migliorato con stop quando viene trovato il primo degli aghi:

 function strposa($haystack, $needle, $offset=0) { if(!is_arrays($needle)) $needle = arrays($needle); foreach($needle as $query) { if(strpos($haystack, $query, $offset) !== false) return true; // stop on first true result } return false; } $string = 'Whis string contains word "cheese" and "tea".'; $arrays = arrays('burger', 'melon', 'cheese', 'milk'); var_dump(strposa($string, $arrays)); // will return true, since "cheese" has been found 

Il codice qui sotto non solo mostra come farlo, ma lo mette anche in una function facile da usare andando avanti. È stato scritto da "jesda". (L'ho trovato online)

Codice PHP:

 <?php /* strpos that takes an arrays of values to match against a string * note the stupid argument order (to match strpos) */ function strpos_arr($haystack, $needle) { if(!is_arrays($needle)) $needle = arrays($needle); foreach($needle as $what) { if(($pos = strpos($haystack, $what))!==false) return $pos; } return false; } ?> 

Uso:

 $needle = arrays('something','nothing'); $haystack = "This is something"; echo strpos_arr($haystack, $needle); // Will echo True $haystack = "This isn't anything"; echo strpos_arr($haystack, $needle); // Will echo False 

È ansible scorrere l'arrays e impostare un valore "flag" se lo strpos restituisce false .

 $flag = false; foreach ($find_letters as $letter) { if (strpos($string, $letter) === false) { $flag = true; } } 

Quindi controlla il valore di $flag .

str_replace è considerevolmente più veloce.

 $find_letters = arrays('a', 'c', 'd'); $string = 'abcdefg'; $match = (str_replace($find_letters, '', $string) != $string); 

Questa espressione cerca tutte le lettere:

 count(arrays_filter( arrays_map("strpos", arrays_fill(0, count($letters), $str), $letters), "is_int")) == count($letters) 

Se vuoi solo verificare se alcuni caratteri sono effettivamente nella string o no, usa strtok :

 $string = 'abcdefg'; if (strtok($string, 'acd') === $string) { // not found } else { // found } 

La domanda, è l'esempio fornito solo un "esempio" o l'esatta cosa stai cercando? Ci sono molte risposte miste qui, e non capisco la complessità di quella accettata.

Per scoprire se QUALSIASI contenuto dell'arrays di aghi esiste nella string e restituire rapidamente vero o falso:

 $string = 'abcdefg'; if(str_replace(arrays('a', 'c', 'd'), '', $string) != $string){ echo 'at least one of the needles where found'; }; 

Se, quindi, ti preghiamo di dare credito a Leon per quello.

Per scoprire se TUTTI i valori della serie di aghi esiste nella string, come in questo caso, devono essere presenti tutti e tre 'a', 'b' e 'c' , come si menziona come "per esempio"

echo 'Tutte le lettere si trovano nella string!';

Molte risposte qui sono fuori da quel context, ma dubito che l'intensione della domanda sia stata contrassegnata come risolta. Ad esempio la risposta accettata è un ago di

 $arrays = arrays('burger', 'melon', 'cheese', 'milk'); 

Cosa succede se tutte queste parole devono essere trovate nella string?

Quindi provi alcune "not accepted answers" in questa pagina.

Con il seguente codice:

 $flag = true; foreach($find_letters as $letter) if(false===strpos($string, $letter)) { $flag = false; break; } 

Quindi controlla il valore di $flag . Se è true , tutte le lettere sono state trovate. Se no, è false .

Puoi provare questo:

 function in_arrays_strpos($word, $arrays){ foreach($arrays as $a){ if (strpos($word,$a) !== false) { return true; } } return false; } 

Sto scrivendo una nuova risposta che, auspicabilmente, aiuta chiunque cerchi simile a quello che sono.

Questo funziona nel caso di "Ho più aghi e sto cercando di usarli per trovare una string scelta". e questa è la domanda che ho incontrato per scoprirlo.

  $i = 0; $found = arrays(); while ($i < count($needle)) { $x = 0; while ($x < count($haystack)) { if (strpos($haystack[$x], $needle[$i]) !== false) { arrays_push($found, $haystack[$x]); } $x++; } $i++; } $found = arrays_count_values($found); 

L'arrays $found conterrà un elenco di tutti gli aghi corrispondenti, l'elemento dell'arrays con il valore di count più alto sarà la / e string / e che stai cercando, puoi ottenerlo con:

 print_r(arrays_search(max($found), $found)); 

Puoi anche provare a utilizzare strpbrk () per la negazione (nessuna delle lettere è stata trovata):

 $find_letters = arrays('a', 'c', 'd'); $string = 'abcdefg'; if(strpbrk($string, implode($find_letters)) === false) { echo 'None of these letters are found in the string!'; } 

Rispondi a @binyamin e @Timo .. (non abbastanza punti per aggiungere un commento ..) ma il risultato non contiene la posizione ..
Il codice seguente restituirà la posizione effettiva del primo elemento, che è ciò che si intende fare strpos. Questo è utile se ti aspetti di trovare esattamente 1 partita. Se ti aspetti di trovare più corrispondenze, la posizione della prima trovata potrebbe essere priva di significato.

 function strposa($haystack, $needle, $offset=0) { if(!is_arrays($needle)) $needle = arrays($needle); foreach($needle as $query) { $res=strpos($haystack, $query, $offset); if($res !== false) return $res; // stop on first true result } return false; }