[RESOLU] Aidez-moi à vérifier si au moins chacune des trois variables contient le mot infob ???

Eléphant du PHP | 137 Messages

14 mars 2021, 23:21

Bonjour.

Je souhaiterais vérifier si chacune des variable ci-après contient au moins le mot infob sachant qu'il y a un seulement qui contient très exactement ce mot infob ALORS QUE JE SOUHAITERAIS EGALEMENT PRENDRE EN COMPTE CELLE QUI CONTIENNENT UNE PARTIE DE CE MÊME MOT infob comme celle des variable $infob_site1 et $infob_site2 qui contiennent seulement une partie.
$infob_site1 = "infob vca";
$infob_site2 = "infob_v122";
$infob_site3 ="infob";
Comment donc vérifier si au moins chacune des trois variables contient le mot infob sans que la variable $infob_site1 et $infob_site2 contiennent beaucoup plus que le mot infob à savoir respectivement infob vca et infob_v122 ???

Merci d'avance.

Mammouth du PHP | 2703 Messages

14 mars 2021, 23:40


Eléphant du PHP | 137 Messages

15 mars 2021, 10:42

Bonjour.

Quand je fais:

Code : Tout sélectionner

$mystring1 = 'infob_v122'; $mystring2 = 'infob vca'; $findme = 'infob'; $pos = strpos($mystring1, $findme); if(pos){ echo "La chaîne ".$findme." se trouve bel et bien dans $mystring1"; } else { echo "Non, pas du tout, elle n'est pas dans $mystring2"; }
Je reçois un retour négatif:

Non, pas du tout, elle n'est pas dans $mystring2

Aidez moi à revoir mon bout de code et ainsi réussir la vérification du mot infob dans chacune des variables $mystring1 et $mystring2.

Merci d'avance

Avatar du membre
Mammouth du PHP | 1609 Messages

15 mars 2021, 12:38

Salut, faudrait se relire un peu quand même. Il y a plusieurs problèmes avec ton code.

Premièrement if (pos) il manque déjà le $ devant pos, if ($pos). Travaillez avec l'affichage des erreurs surtout quand vous débutez.

Deuxièmement strpos retourne la position de la première occurrence trouvée dans ce cas 0. Et un if (0) ça fait false. Il faut plutôt faire un if ($pos !== false) 2 égales pour une comparaison strict, strpos retournant false si aucune occurrence n'est trouvée.

Troisièmement tu fais un seul test sur $mystring1 et dans le code si false tu affiches $mystring2. Ne devrais tu pas avoir 2 strpos avec 2 structures de test ?
Développeur web depuis + de 20 ans

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

15 mars 2021, 12:41

Salutations !

Si tu regardes plus en détail la doc de la fonction strpos(), tu verras qu'elle retourne la position numérique de l'occurrence relativement au début de la chaîne (la position dans la chaîne commence à 0). Retourne false si l'occurrence n'a pas été trouvée.

Tu verras également cet "Avertissement" : Cette fonction peut retourner false, mais elle peut aussi retourner une valeur équivalent à false (la position 0).

Ta condition ne doit donc pas juste vérifier la valeur retourner, mais également le type de retour (booléen ou numérique) : if ($pos !== false)


Edit : erf, grillé par Saian ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Mammouth du PHP | 1609 Messages

15 mars 2021, 12:45

Haha désolé. ^^
Développeur web depuis + de 20 ans

Eléphant du PHP | 137 Messages

15 mars 2021, 23:23

Merci à chacun de vous. Mais j'ai remarqué que PHP 8 a maintenant des fonction comme str_contains et str_starts_with. Ne pensez-vous pas qu'elles seront également adapté ???

Si oui, pourriez-vous me donner un exemple de les utiliser dans mon cas ???

Merci d'avance.

Mammouth du PHP | 2703 Messages

15 mars 2021, 23:35

c'est si compliqué de chercher le nom de fonction, en ajoutant éventuellement "php", d'aller sur https://www.php.net/manual/fr/function.str-contains.php où, comme pour chaque fonction, il y a des exemples ?