Ich versuche festzustellen, ob eine Zeichenfolge mindestens eine URL enthält, die in einem Array gespeichert ist.
Hier ist mein Array:
$owned_urls = array('website1.com', 'website2.com', 'website3.com');
Die Zeichenfolge wird vom Benutzer eingegeben und über PHP übermittelt. Auf der Bestätigungsseite möchte ich überprüfen, ob sich die eingegebene URL im Array befindet.
Ich habe folgendes versucht:
$string = 'my domain name is website3.com';
if (in_array($string, $owned_urls))
{
echo "Match found";
return true;
}
else
{
echo "Match not found";
return false;
}
Unabhängig davon, was eingegeben wird, lautet die Rückgabe immer "Übereinstimmung nicht gefunden".
Ist das die richtige Art, Dinge zu tun?
Antworten:
Versuche dies.
$string = 'my domain name is website3.com'; foreach ($owned_urls as $url) { //if (strstr($string, $url)) { // mine version if (strpos($string, $url) !== FALSE) { // Yoshi version echo "Match found"; return true; } } echo "Not found!"; return false;
Verwenden Sie stristr () oder stripos (), wenn Sie die Groß- und Kleinschreibung nicht berücksichtigen möchten.
quelle
else
Blocks muss unter dieforeach
Schleife gehen.**Note**: If you only want to determine if a particular needle occurs within haystack, use the faster and less memory intensive function strpos() instead.
site3.com
. Es wird passen,mysite3.com
wenn es nicht sollteVersuche dies:
$owned_urls= array('website1.com', 'website2.com', 'website3.com'); $string = 'my domain name is website3.com'; $url_string = end(explode(' ', $string)); if (in_array($url_string,$owned_urls)){ echo "Match found"; return true; } else { echo "Match not found"; return false; }
- Vielen Dank
quelle
My url is https://website3.com
Einfach
str_replace
mit count Parameter würde hier funktionieren:$count = 0; str_replace($owned_urls, '', $string, $count); // if replace is successful means the array value is present(Match Found). if ($count > 0) { echo "One of Array value is present in the string."; }
Weitere Informationen - https://www.techpurohit.com/extended-behaviour-explode-and-strreplace-php
quelle
Dies war viel einfacher, wenn Sie nur eine Zeichenfolge in einem Array finden möchten.
$array = ["they has mystring in it", "some", "other", "elements"]; if (stripos(json_encode($array),'mystring') !== false) { echo "found mystring"; }
quelle
$string = 'my domain name is website3.com'; $a = array('website1.com','website2.com','website3.com'); $result = count(array_filter($a, create_function('$e','return strstr("'.$string.'", $e);')))>0; var_dump($result );
Ausgabe
bool(true)
quelle
create_function
ist in PHP 7.2Ich denke, dass ein schnellerer Weg die Verwendung von preg_match ist .
$user_input = 'Something website2.com or other'; $owned_urls_array = array('website1.com', 'website2.com', 'website3.com'); if ( preg_match('('.implode('|',$owned_urls_array).')', $user_input)){ echo "Match found"; }else{ echo "Match not found"; }
quelle
addcslashes(implode('|', $owned_urls_array, '.'))
Hier ist eine Minifunktion, die alle Werte aus einem Array in einer bestimmten Zeichenfolge durchsucht. Ich verwende dies auf meiner Website, um zu überprüfen, ob die IP-Adresse des Besuchers auf bestimmten Seiten in meiner zulässigen Liste enthalten ist.
function array_in_string($str, array $arr) { foreach($arr as $arr_value) { //start looping the array if (stripos($str,$arr_value) !== false) return true; //if $arr_value is found in $str return true } return false; //else return false }
wie benutzt man
$owned_urls = array('website1.com', 'website2.com', 'website3.com'); //this example should return FOUND $string = 'my domain name is website3.com'; if (array_in_string($string, $owned_urls)) { echo "first: Match found<br>"; } else { echo "first: Match not found<br>"; } //this example should return NOT FOUND $string = 'my domain name is website4.com'; if (array_in_string($string, $owned_urls)) { echo "second: Match found<br>"; } else { echo "second: Match not found<br>"; }
DEMO: http://phpfiddle.org/lite/code/qf7j-8m09
Die Stripos- Funktion ist nicht sehr streng. Es unterscheidet nicht zwischen Groß- und Kleinschreibung oder kann mit einem Teil eines Wortes übereinstimmen: http://php.net/manual/ro/function.stripos.php
Wenn Sie möchten, dass bei dieser Suche zwischen Groß- und Kleinschreibung unterschieden wird, verwenden Sie strpos http://php.net/manual/ro/function.strpos.php
Überprüfen Sie die Antwort dieses Typen auf https://stackoverflow.com/a/25633879/4481831 , um eine genaue Übereinstimmung mit Regex ( preg_match ) zu erhalten
quelle
stripos
Wenn Ihr
$string
immer konsistent ist (dh. Der Domain - Name ist immer am Ende des Strings), können Sieexplode()
mitend()
, und verwenden Sie dannin_array()
nach einer Übereinstimmung überprüfen (Wie von @Anand Solanki in ihrer Antwort).Wenn nicht, sollten Sie einen regulären Ausdruck verwenden, um die Domäne aus der Zeichenfolge zu extrahieren, und dann
in_array()
nach einer Übereinstimmung suchen.$string = 'There is a url mysite3.com in this string'; preg_match('/(?:http:\/\/)?(?:www.)?([a-z0-9-_]+\.[a-z0-9.]{2,5})/i', $string, $matches); if (empty($matches[1])) { // no domain name was found in $string } else { if (in_array($matches[1], $owned_urls)) { // exact match found } else { // exact match not found } }
Der obige Ausdruck könnte wahrscheinlich verbessert werden (ich bin in diesem Bereich nicht besonders gut informiert)
Hier ist eine Demo
quelle
Sie können die Array-Werte mit implode und einem Trennzeichen von | verketten Verwenden Sie dann preg_match, um nach dem Wert zu suchen.
Hier ist die Lösung, die ich mir ausgedacht habe ...
$emails = array('@gmail', '@hotmail', '@outlook', '@live', '@msn', '@yahoo', '@ymail', '@aol'); $emails = implode('|', $emails); if(!preg_match("/$emails/i", $email)){ // do something }
quelle
$owned_urls= array('website1.com', 'website2.com', 'website3.com'); $string = 'my domain name is website3.com'; for($i=0; $i < count($owned_urls); $i++) { if(strpos($string,$owned_urls[$i]) != false) echo 'Found'; }
quelle
Sie überprüfen die gesamte Zeichenfolge auf die Array-Werte. Die Ausgabe ist also immer
false
.Ich benutze beide
array_filter
undstrpos
in diesem Fall.<?php $urls= array('website1.com', 'website2.com', 'website3.com'); $string = 'my domain name is website3.com'; $check = array_filter($urls, function($url){ global $string; if(strpos($string, $url)) return true; }); echo $check?"found":"not found";
quelle
Sie verwenden die Funktion in_array ( http://php.net/manual/en/function.in-array.php ) nicht richtig:
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
Die $ -Nadel muss einen Wert im Array haben, daher müssen Sie zuerst die URL aus der Zeichenfolge extrahieren (z. B. mit einem regulären Ausdruck). Etwas wie das:
$url = extrctUrl('my domain name is website3.com'); //$url will be 'website3.com' in_array($url, $owned_urls)
quelle
Wenn Sie versuchen, eine genaue Wortübereinstimmung zu erhalten (keine Pfade in URLs)
$string = 'my domain name is website3.com'; $words = explode(' ', $string); $owned_urls= array('website1.com', 'website2.com', 'website3.com'); var_dump(array_intersect($words, $owned_urls));
Ausgabe:
array(1) { [4]=> string(12) "website3.com" }
quelle
$message = "This is test message that contain filter world test3"; $filterWords = array('test1', 'test2', 'test3'); $messageAfterFilter = str_replace($filterWords, '',$message); if( strlen($messageAfterFilter) != strlen($message) ) echo 'message is filtered'; else echo 'not filtered';
quelle
Ich finde das schnell und einfach ohne laufende Schleife.
$array = array("this", "that", "there", "here", "where"); $string = "Here comes my string"; $string2 = "I like to Move it! Move it"; $newStr = str_replace($array, "", $string); if(strcmp($string, $newStr) == 0) { echo 'No Word Exists - Nothing got replaced in $newStr'; } else { echo 'Word Exists - Some Word from array got replaced!'; } $newStr = str_replace($array, "", $string2); if(strcmp($string2, $newStr) == 0) { echo 'No Word Exists - Nothing got replaced in $newStr'; } else { echo 'Word Exists - Some Word from array got replaced!'; }
Kleine Erklärung!
Erstellen Sie eine neue Variable,
$newStr
indem Sie den Wert im Array der ursprünglichen Zeichenfolge ersetzen.Zeichenfolgenvergleich durchführen - Wenn der Wert 0 ist, bedeutet dies, dass die Zeichenfolgen gleich sind und nichts ersetzt wurde. Daher ist in der Zeichenfolge kein Wert im Array vorhanden.
Wenn es umgekehrt zu 2 ist, dh während des Zeichenfolgenvergleichs, wurden sowohl die ursprüngliche als auch die neue Zeichenfolge nicht abgeglichen, was bedeutet, dass etwas ersetzt wurde, sodass der Wert im Array in der Zeichenfolge vorhanden ist.
quelle
$search = "web" $owned_urls = array('website1.com', 'website2.com', 'website3.com'); foreach ($owned_urls as $key => $value) { if (stristr($value, $search) == '') { //not fount }else{ //found }
Dies ist der beste Ansatz für die Suche nach Teilzeichenfolgen, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird und die schnell sind
Ex:
quelle
Ich habe mir diese Funktion ausgedacht, die für mich funktioniert. Ich hoffe, dies wird jemandem helfen
$word_list = 'word1, word2, word3, word4'; $str = 'This string contains word1 in it'; function checkStringAgainstList($str, $word_list) { $word_list = explode(', ', $word_list); $str = explode(' ', $str); foreach ($str as $word): if (in_array(strtolower($word), $word_list)) { return TRUE; } endforeach; return false; }
Beachten Sie außerdem, dass Antworten mit strpos () true zurückgeben, wenn das übereinstimmende Wort Teil eines anderen Wortes ist. Wenn die Wortliste beispielsweise 'st' enthält und Ihre Zeichenfolge 'street' enthält, gibt strpos () true zurück
quelle
DANKE dafür - konnte gerade diese Antwort auf die ursprüngliche Frage verwenden, um eine einfach zu verwendende 404-Fehlerseitenprüfung für benutzerdefinierte 404-Fehlerseiten zu entwickeln.
Hier geht:
Sie benötigen ein Array von livePages auf Ihrer Site, über Array / DB usw., selbst eine Auflistung Ihres
<dir>
Baums wird dies mit Änderungen tun:Wenn Sie die ursprüngliche IDEE verwenden, aber ähnlichen Text anstelle von Strpos verwenden, haben Sie die Möglichkeit, nach ähnlichen Namen zu suchen. Dies ermöglicht auch TYPOS, sodass Sie Sound-a-like- und Look-a-like-Namen vermeiden oder finden können ...
<?php // We need to GRAB the URL called via the browser :: $requiredPage = str_replace ('/', '',$_SERVER[REQUEST_URI]); // We need to KNOW what pages are LIVE within the website :: $livePages = array_keys ($PageTEXT_2col ); foreach ($livePages as $url) { if (similar_text($requiredPage, $url, $percent)) { $percent = round($percent,2); // need to avoid to many decimal places :: // if (strpos($string, $url) !== FALSE) { // Yoshi version if (round($percent,0) >= 60) { // set your percentage of "LIKENESS" higher the refiner the search in your array :: echo "Best Match found = " . $requiredPage . " > ,<a href='http://" . $_SERVER['SERVER_NAME'] . "/" . $url . "'>" . $url . "</a> > " . $percent . "%"; return true; } } } echo "Sorry Not found = " . $requiredPage; return false; ?>
Ich hoffe, dies hilft jemandem, wie dieser Artikel mir geholfen hat, eine sehr einfache Suche / Übereinstimmung auf einer 404ErrorDoc-Seite zu erstellen.
Das Design der Seite ermöglicht es dem Server, über den Browser wahrscheinliche URL-Übereinstimmungen mit allen angerufenen URLs zu erstellen ...
Es funktioniert - und ist sooo einfach, vielleicht gibt es bessere Möglichkeiten, dies zu tun, aber so funktioniert es.
quelle