@Dave ein aktualisiertes Snippet von http://www.php.net/manual/en/function.strpos.php#107351
function strposa($haystack, $needles=array(), $offset=0) {
$chr = array();
foreach($needles as $needle) {
$res = strpos($haystack, $needle, $offset);
if ($res !== false) $chr[$needle] = $res;
}
if(empty($chr)) return false;
return min($chr);
}
Wie benutzt man:
$string = 'Whis string contains word "cheese" and "tea".';
$array = array('burger', 'melon', 'cheese', 'milk');
if (strposa($string, $array, 1)) {
echo 'true';
} else {
echo 'false';
}
wird true
wegen zurückkehren array
"cheese"
.
Update: Verbesserter Code mit Stopp, wenn die erste der Nadeln gefunden wird:
function strposa($haystack, $needle, $offset=0) {
if(!is_array($needle)) $needle = array($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".';
$array = array('burger', 'melon', 'cheese', 'milk');
var_dump(strposa($string, $array)); // will return true, since "cheese" has been found
strposa
durchläuft den gesamten Text, ist aber nicht erforderlich! Bin ich verständlichforeach($needle as $k => $query) { if(strpos($haystack, $query, $offset) !== false) return $k; }
, sodass der Schlüssel des übereinstimmenden Elements zur weiteren Bearbeitung zurückgegeben wird.str_replace ist erheblich schneller.
quelle
Der folgende Code zeigt nicht nur, wie es geht, sondern bringt es auch in eine benutzerfreundliche Funktion, die sich weiterentwickelt. Es wurde von "jesda" geschrieben. (Ich habe es online gefunden)
PHP-Code:
Verwendung:
quelle
Sie können das Array durchlaufen und bei
strpos
Rückgabe einen "Flag" -Wert festlegenfalse
.Überprüfen Sie dann den Wert von
$flag
.quelle
!== flase
?Wenn Sie nur überprüfen möchten, ob bestimmte Zeichen tatsächlich in der Zeichenfolge enthalten sind oder nicht, verwenden Sie strtok :
quelle
Die Frage, ist das bereitgestellte Beispiel nur ein "Beispiel" oder genau das, wonach Sie suchen? Hier gibt es viele gemischte Antworten, und ich verstehe die Komplexität der akzeptierten nicht.
Um herauszufinden, ob JEDER Inhalt des Nadelarrays in der Zeichenfolge vorhanden ist, und schnell true oder false zurückzugeben:
Wenn ja, geben Sie @Leon dies bitte gut .
Um herauszufinden, ob ALLE Werte des Nadelarrays in der Zeichenfolge vorhanden sind, MÜSSEN in diesem Fall alle drei
'a', 'b'
und'c'
MÜSSEN vorhanden sein, wie Sie als "Beispiel" angeben.Viele Antworten hier sind nicht in diesem Zusammenhang, aber ich bezweifle, dass die Intensität der Frage, die Sie als gelöst markiert haben. ZB Die akzeptierte Antwort ist eine Nadel von
Was ist, wenn all diese Wörter in der Zeichenfolge gefunden werden müssen?
Dann probieren Sie einige
"not accepted answers"
auf dieser Seite aus.quelle
Dieser Ausdruck sucht nach allen Buchstaben:
quelle
Sie können dies versuchen:
quelle
Sie können auch versuchen, strpbrk () für die Negation zu verwenden (keiner der Buchstaben wurde gefunden):
quelle
Das ist mein Ansatz. Durchlaufen Sie die Zeichen in der Zeichenfolge, bis eine Übereinstimmung gefunden wird. Bei einer größeren Anzahl von Nadeln übertrifft dies die akzeptierte Antwort, da nicht jede Nadel überprüft werden muss, um festzustellen, ob eine Übereinstimmung gefunden wurde.
Ich habe dies mit der akzeptierten Antwort verglichen und mit einer Reihe von mehr als 7 war
$needles
dies dramatisch schneller.quelle
Mit folgendem Code:
Überprüfen Sie dann den Wert von
$flag
. Wenn jatrue
, wurden alle Buchstaben gefunden. Wenn nicht, ist esfalse
.quelle
Ich schreibe eine neue Antwort, die hoffentlich jedem hilft, der nach dem sucht, was ich bin.
Dies funktioniert im Fall von "Ich habe mehrere Nadeln und ich versuche, sie zu verwenden, um eine einzelne Schnur zu finden". und das ist die Frage, auf die ich gestoßen bin, um das zu finden.
Das Array
$found
enthält eine Liste aller übereinstimmenden Nadeln. Das Element des Arrays mit dem höchsten Zählwert ist die gesuchte Zeichenfolge. Sie können diese erhalten mit:quelle
Antworte auf @binyamin und @Timo .. (nicht genug Punkte, um einen Kommentar hinzuzufügen ..), aber das Ergebnis enthält nicht die Position ..
Der folgende Code gibt die tatsächliche Position des ersten Elements zurück, für das strpos bestimmt ist machen. Dies ist nützlich, wenn Sie genau 1 Übereinstimmung erwarten. Wenn Sie mehrere Übereinstimmungen erwarten, ist die Position der zuerst gefundenen möglicherweise bedeutungslos.
quelle
Nur ein Upgrade von oben Antworten
quelle