Vérifiez si la chaîne contient une valeur dans le tableau

J’essaie de détecter si une chaîne contient au moins une URL stockée dans un tableau.

Voici mon tableau:

$owned_urls = array('website1.com', 'website2.com', 'website3.com'); 

La chaîne est entrée par l’utilisateur et soumise via PHP. Sur la page de confirmation, je voudrais vérifier si l’URL entrée est dans le tableau.

J’ai essayé ce qui suit:

 $ssortingng = 'my domain name is website3.com'; if (in_array($ssortingng, $owned_urls)) { echo "Match found"; return true; } else { echo "Match not found"; return false; } 

Peu importe ce qui est entré, le retour est toujours “Match not found”.

Est-ce la bonne façon de faire les choses?

Essaye ça.

 $ssortingng = 'my domain name is website3.com'; foreach ($owned_urls as $url) { //if (strstr($ssortingng, $url)) { // mine version if (strpos($ssortingng, $url) !== FALSE) { // Yoshi version echo "Match found"; return true; } } echo "Not found!"; return false; 

Utilisez ssortingstr () ou ssortingpos () si vous souhaitez vérifier la casse.

Essaye ça:

 $owned_urls= array('website1.com', 'website2.com', 'website3.com'); $ssortingng = 'my domain name is website3.com'; $url_ssortingng = end(explode(' ', $ssortingng)); if (in_array($url_ssortingng,$owned_urls)){ echo "Match found"; return true; } else { echo "Match not found"; return false; } 

– Merci

str_replace simple avec le paramètre count fonctionnerait ici:

 $count = 0; str_replace($owned_urls, '', $ssortingng, $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 ssortingng."; } 

C’était beaucoup plus facile à faire si tout ce que vous voulez faire est de trouver une chaîne dans un tableau.

 $array = ["they has myssortingng in it", "some", "other", "elements"]; if (ssortingpos(json_encode($array),'myssortingng') !== false) { echo "found myssortingng"; } 
 $ssortingng = 'my domain name is website3.com'; $a = array('website1.com','website2.com','website3.com'); $result = count(array_filter($a, create_function('$e','return strstr("'.$ssortingng.'", $e);')))>0; var_dump($result ); 

sortie

 bool(true) 

Si votre $ssortingng est toujours cohérente (c’est-à-dire que le nom de domaine est toujours à la fin de la chaîne), vous pouvez utiliser explode() avec end() , puis utiliser in_array() pour rechercher une correspondance (comme indiqué par @Anand Solanki dans leur réponse).

Sinon, mieux vaut utiliser une expression régulière pour extraire le domaine de la chaîne, puis utiliser in_array() pour rechercher une correspondance.

 $ssortingng = 'There is a url mysite3.com in this ssortingng'; preg_match('/(?:http:\/\/)?(?:www.)?([a-z0-9-_]+\.[a-z0-9.]{2,5})/i', $ssortingng, $matches); if (empty($matches[1])) { // no domain name was found in $ssortingng } else { if (in_array($matches[1], $owned_urls)) { // exact match found } else { // exact match not found } } 

L’expression ci-dessus pourrait probablement être améliorée (je ne suis pas particulièrement compétent dans ce domaine)

Voici une démo

Je pense qu’un moyen plus rapide consiste à utiliser preg_match .

 $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"; } 
 $owned_urls= array('website1.com', 'website2.com', 'website3.com'); $ssortingng = 'my domain name is website3.com'; for($i=0; $i < count($owned_urls); $i++) { if(strpos($string,$owned_urls[$i]) != false) echo 'Found'; } 

Voici une mini-fonction qui recherche toutes les valeurs d’un tableau dans une chaîne donnée. Je l’utilise sur mon site pour vérifier que l’adresse IP du visiteur figure dans ma liste autorisée sur certaines pages.

 function array_in_ssortingng($str, array $arr) { foreach($arr as $arr_value) { //start looping the array if (strpos($str,$arr_value) !== false) return true; //if $arr_value is found in $str return true } return false; //else return false } 

comment utiliser

 $owned_urls = array('website1.com', 'website2.com', 'website3.com'); //this example should return FOUND $ssortingng = 'my domain name is website3.com'; if (array_in_ssortingng($ssortingng, $owned_urls)) { echo "first: Match found
"; } else { echo "first: Match not found
"; } //this example should return NOT FOUND $ssortingng = 'my domain name is website4.com'; if (array_in_ssortingng($ssortingng, $owned_urls)) { echo "second: Match found
"; } else { echo "second: Match not found
"; }

DEMO: http://phpfiddle.org/lite/code/qf7j-8m09

la fonction strpos n’est pas très ssortingcte. Ce n’est pas sensible à la casse ou il peut correspondre à une partie d’un mot. http://php.net/manual/ro/function.strpos.php Si vous voulez que cette recherche soit plus ssortingcte, vous devez utiliser une fonction différente (par exemple, vérifiez la réponse de ce type pour une fonction ssortingcte https://stackoverflow.com / a / 25633879/4481831 )

Vous n’utilisez pas correctement la fonction in_array ( http://php.net/manual/en/function.in-array.php ):

 bool in_array ( mixed $needle , array $haystack [, bool $ssortingct = FALSE ] ) 

Le $ needle doit avoir une valeur dans le tableau, vous devez donc d’abord extraire l’URL de la chaîne (avec une expression régulière par exemple). Quelque chose comme ça:

 $url = extrctUrl('my domain name is website3.com'); //$url will be 'website3.com' in_array($url, $owned_urls) 

Vous vérifiez la chaîne entière aux valeurs du tableau. Donc, la sortie est toujours false .

J’utilise à la fois array_filter et strpos dans ce cas.

  

Si vous essayez d’obtenir une correspondance exacte (ne pas avoir de chemin à l’intérieur des URL)

 $ssortingng = 'my domain name is website3.com'; $words = explode(' ', $ssortingng); $owned_urls= array('website1.com', 'website2.com', 'website3.com'); var_dump(array_intersect($words, $owned_urls)); 

Sortie:

 array(1) { [4]=> ssortingng(12) "website3.com" } 
  $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'; 

Je trouve cela simple et rapide sans faire de boucle.

 $array = array("this", "that", "there", "here", "where"); $ssortingng = "Here comes my ssortingng"; $ssortingng2 = "I like to Move it! Move it"; $newStr = str_replace($array, "", $ssortingng); if(strcmp($ssortingng, $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, "", $ssortingng2); if(strcmp($ssortingng2, $newStr) == 0) { echo 'No Word Exists - Nothing got replaced in $newStr'; } else { echo 'Word Exists - Some Word from array got replaced!'; } 

Petite explication!

  1. Créez une nouvelle variable avec $newStr remplaçant la valeur dans le tableau de la chaîne d’origine.

  2. Do ssortingng comparison – Si la valeur est 0, cela signifie que les chaînes sont égales et que rien n’a été remplacé. Par conséquent, aucune valeur dans le tableau n’existe dans la chaîne.

  3. Si c’est l’inverse de 2, c.-à-d. que pendant la comparaison de chaînes, les chaînes originales et nouvelles ne correspondent pas, cela signifie que quelque chose a été remplacé, la valeur du tableau existe donc dans la chaîne.

MERCI pour cela – j’ai juste pu utiliser cette réponse à la question initiale pour développer un vérificateur de page d’erreur 404 simple à utiliser, à utiliser sur les pages d’erreur 404 personnalisées.

Voici:

Vous avez besoin d’un tableau de livePages sur votre site, via un tableau / DB etc, même une liste de votre arbre

fera cela avec des modifications:

En utilisant l’IDEA original, mais en utilisant du texte similaire au lieu de strpos, – cela vous donne la possibilité de rechercher des noms LIKE, ainsi permet-il TYPOS, vous pouvez donc éviter ou trouver des noms Sound-a-like et Look-a-like …

 = 60) { // set your percentage of "LIKENESS" higher the refiner the search in your array :: echo "Best Match found = " . $requiredPage . " > ," . $url . " > " . $percent . "%"; return true; } } } echo "Sorry Not found = " . $requiredPage; return false; ?> 

J’espère que cela aide quelqu’un, comme cet article m’a aidé à créer une recherche / correspondance très simple sur une page 404ErrorDoc.

La conception de la page permettra au serveur de proposer des correspondances d’URL probables à toutes les URL appelées via le navigateur …

Cela fonctionne – et c’est tellement simple, peut-être qu’il y a de meilleures façons de le faire, mais cela fonctionne.