Mammouth du PHP |
1967 Messages
12 juil. 2019, 14:39
Non tu comprends la fonction de travers.
in_array cherche à savoir si la valeur d'une variable se trouve dans le tableau. la variable peut être une chaine de caractère, et dans ce cas la casse sera prise en compte, cela veut dire que
in_array("un",["un","deux","trois"]); => True
in_array("Un",["un","deux","trois"]); => False
mais il faut que ta chaine de caractère correspondent à tous l'élément du tableaux
ainsi
in_array("deu",["un","deux","trois"]); => False
après tout dépends de ce que tu veux obtenir, si tu veux savoir si chaque mot de ton tableaux se trouve dans ta phrase, il te faudra utiliser strpos dans une boucle.
strpos te donnera en effet la position de cette chaine, tu peux ne pas en avoir besoin mieux vaut trop que trop peu. Comme la doc le mentionne strpos retourne False si rien n'est trouvé et php considèrera tous les entiers sauf 0 comme True. donc tu peux imaginer un if (strpos("Ce mec est sympa","sympa")) qui se déclenchera peut importe le résultat de ton strpos. mais avec if (strpos("Ce mec est sympa","Ce")) cela ne marchera pas car Ce est en position 0 donc un if(0) équivaut à if(False).
La solution est de vérifier que strpos n'est strictement pas égal à False if (strpos("Ce mec est sympa","sympa") !== False) remarque le double égale en plus du !
Si tu veux savoir si ta phrase contient au moins un des mots de la phrase, tu peux le faire avec une boucle et ne pas te soucier de savoir de quelle mot il s'agit.
mais je proposerai potentiellement une tout autre voie.
!empty(array_intersect($tableau,explode(" ",$chaine)));
Ces 3 fonctions vont travailler de concert :
explode divise la chaine en un tableau de mot
array_intersect cherche les "mots" commun au 2 tableaux
empty check si la tableau résultant est vide
! inverse le résultat pour retourner True si au moins un mots du tableaux se trouve dans chaine et false dans les autres cas.
mais attention dans ce cas là par exemple "ennuie" ne se trouvera pas dans la phrase "on s'ennuie ici" car c'est le mot "s'ennuie" qui est présent. strpos sera plus indiqué.