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 ?

1voto

Da Beginer Points 33

J'ai créé cette fonction qui fonctionne pour moi, j'espère que cela aidera quelqu'un

$word_list = 'mot1, mot2, mot3, mot4';
$str = 'Cette chaîne contient le mot1';

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;
}

Notez également que les réponses avec strpos() renverront true si le mot correspondant fait partie d'un autre mot. Par exemple, si la liste de mots contient 'st' et si votre chaîne contient 'street', strpos() renverra true

1voto

Sandesh Points 353
$owned_urls= array('website1.com', 'website2.com', 'website3.com');
    $string = 'mon nom de domaine est website3.com';
    for($i=0; $i < count($owned_urls); $i++)
    {
        if(strpos($string,$owned_urls[$i]) != false)
            echo 'Trouvé';
    }

0voto

Tahir Jamil Points 21
    $message = "Ceci est un message de test contenant le mot de filtre test3";

    $motsFiltres = array('test1', 'test2', 'test3');

    $messageApresFiltre =  str_replace($motsFiltres, '',$message);

    if( strlen($messageApresFiltre) != strlen($message) )
        echo 'message filtré';
    else
        echo 'non filtré';

0voto

user3767643 Points 169

Je trouve cela rapide et simple sans exécuter de boucle.

$array = array("this", "that", "there", "here", "where");
$string = "Voici ma chaîne";
$string2 = "J'aime bouger! Bouger!";

$newStr = str_replace($array, "", $string);

if(strcmp($string, $newStr) == 0) {
    echo 'Aucun mot trouvé - Aucun remplacement dans $newStr';
} else {
    echo 'Mot trouvé - Un mot de la liste a été remplacé !';
}

$newStr = str_replace($array, "", $string2);

if(strcmp($string2, $newStr) == 0) {
    echo 'Aucun mot trouvé - Aucun remplacement dans $newStr';
} else {
    echo 'Mot trouvé - Un mot de la liste a été remplacé !';
}

Petite explication:

  1. Créez une nouvelle variable avec $newStr en remplaçant les valeurs du tableau dans la chaîne originale.

  2. Effectuez une comparaison de chaînes - Si la valeur est 0, cela signifie que les chaînes sont égales et aucun remplacement n'a été effectué, donc aucune valeur du tableau n'existe dans la chaîne.

  3. Si c'est le contraire du point 2, c'est-à-dire, lors de la comparaison de chaînes, la chaîne originale et la nouvelle chaîne ne correspondent pas, cela signifie que quelque chose a été remplacé, donc une valeur du tableau existe dans la chaîne.

0voto

Yahya Ayyoub Points 162
$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
   }

il s'agit de la meilleure approche pour rechercher n'importe quelle sous-chaîne, insensible à la casse et rapide

tout comme dans MySQL

exemple :

sélectionner * from table où name = "%web%"

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