103 votes

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

Je suis en train de chercher à détecter si une chaîne de caractères contient au moins une URL qui est stockée dans un tableau.

Voici mon tableau :

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

La chaîne de caractères est saisie par l'utilisateur et soumise via PHP. Sur la page de confirmation, je voudrais vérifier si l'URL saisie est dans le tableau.

J'ai essayé ce qui suit :

$string = 'mon nom de domaine est website3.com';
if (in_array($string, $owned_urls))
{
    echo "Correspondance trouvée"; 
    return true;
}
else
{
    echo "Aucune correspondance trouvée";
    return false;
}

Peu importe ce qui est saisi, le retour est toujours "Aucune correspondance trouvée".

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

115voto

Daniele Brugnara Points 880

Essayez ceci.

$string = 'mon nom de domaine est website3.com';
foreach ($owned_urls as $url) {
    //if (strstr($string, $url)) { // ma version
    if (strpos($string, $url) !== FALSE) { // version Yoshi
        echo "Correspondance trouvée"; 
        return true;
    }
}
echo "Non trouvé!";
return false;

Utilisez stristr() ou stripos() si vous souhaitez vérifier sans tenir compte de la casse.

42voto

Joseph Philbert Points 485

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

$array = ["ils ont ma chaîne dedans", "quelques", "autres", "éléments"];
if (stripos(json_encode($array),'ma chaîne') !== false) {
echo "trouvé ma chaîne";
}

27voto

Anand Solanki Points 3287

Essayez ceci :

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

$string = 'mon nom de domaine est website3.com';

$url_string = end(explode(' ', $string));

if (in_array($url_string, $owned_urls)) {
    echo "Correspondance trouvée"; 
    return true;
} else {
    echo "Correspondance non trouvée";
    return false;
}

- Merci

26voto

jitendrapurohit Points 5526

Simple str_replace avec le paramètre de comptage fonctionnerait ici :

$count = 0;
str_replace($owned_urls, '', $string, $count);
// si le remplacement est réussi, cela signifie que la valeur du tableau est présente (correspondance trouvée).
if ($count > 0) {
  echo "Une des valeurs du tableau est présente dans la chaîne.";
}

Plus d'informations - https://www.techpurohit.in/extended-behaviour-explode-and-strreplace-php

10voto

vencedor Points 144

Je pense qu'un moyen plus rapide est d'utiliser preg_match.

$user_input = 'Quelque chose website2.com ou autre';
$owned_urls_array = array('website1.com', 'website2.com', 'website3.com');

if ( preg_match('('.implode('|',$owned_urls_array).')', $user_input)){
    echo "Correspondance trouvée"; 
}else{
    echo "Aucune correspondance trouvée";
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X