Io tendo ad usare strpos
$needle='appy';
$haystack='I\'m feeling flappy, and you?';
if(strpos($haystack,$needle)!==false){
//then it was found
}
Se si vuole ignorare caso, utilizzare stripos.
Si noti che una sottigliezza di ciò è che se l'ago si trova all'inizio del pagliaio, in posizione 0, viene restituito l'intero 0. Ciò significa che è necessario confrontare a false
, utilizzando il confronto rigoroso, oppure può produrre un falso negativo.
Come indicato nel manuale, collegato sopra
Warning
Questa funzione può restituire booleana FALSE, ma può anche restituire un valore non-Booleano che restituisce FALSE, come ad esempio 0 o "". Si prega di leggere la sezione su Booleans per ulteriori informazioni . Utilizzare l'operatore === per testando il valore restituito di questa funzione .
Per quanto riguarda l'utilizzo di matrici, lo strpos è pensato per prendere due stringhe. L'utilizzo di un array produce Warning: strpos() expects parameter 1 to be string, array given
o 1Avvertenza: strpos(): needle non è una stringa o un intero`.
Ok, supponiamo che tu abbia una serie di stringhe per le quali cercare.
Puoi
$needles=array('hose','fribb','pancake');
$haystack='Where are those pancakes??';
foreach($needles as $ndl){
if(strpos($haystack,$ndl)!==false){ echo "'$ndl': found<br>\n"; }
else{ echo "'$ndl' : not found<br>\n"; }
}
Un altro modo di cercare stringhe multiple in una stringa, senza l'utilizzo di una matrice ... Questo ti dice solo se è stata trovata almeno una partita.
$haystack='Where are those pancakes??';
$match=preg_match('#(hose|fribb|pancake)#',$haystack);
//$match is now int(1)
Oppure utilizzare preg_match_all per vedere quante partite ci sono, totale.
$all_matches=preg_match_all('#(hose|fribb|pancake)#',$haystack,$results);
//all_matches is int(2). Note you also have $results, which stores which needles matched.
In questo, il termine di ricerca è un'espressione regolare. ()
raggruppa i termini insieme e |
significa "o". #
indica l'inizio e la fine del modello. I regex possono diventare abbastanza complicati rapidamente, ma ovviamente funzionano! Spesso vengono evitati per motivi di prestazioni, ma se si stanno testando più stringhe, questo potrebbe essere più efficiente del loro metodo di loop array descritto sopra. Sono sicuro che ci sono anche altri modi per farlo.
Ok, bene. E se fosse in un array? (controlla post modificato). – MacMac
Vuoi dire che il pagliaio è un array? O l'ago? Controlla i documenti PHP - il primo commento è attualmente 'strpos che accetta un array per $ needle' – JAL
In sostanza dovrai usare foreach per iterare sull'array, qualunque esso sia. preg_match è una soluzione praticabile se hai molti "aghi" e un "pagliaio". – JAL