strstr() marche une fois sur milles ?

Par Shadows, il y a 11 ans


Bon je bloque sur un script sur lequel de travailler. Sans entrer dans les détails j'aimerais comparer deux variables pour savoir si l'une partie d'une chaîne est contenu dans l'autre.

$var1 = [WT] Super Mario 3D Land #13 [100%];
$var2 = [WT] Super Mario 3D Land [100%];
var_dump(strstr($var1, $var2));

Dans cet exemple, ça me retourne false et je n'arrive pas à cerner pourquoi...

6 réponses

Pakito, il y a 11 ans

Tes variables ne sont pas des strings.

Essaie comme ça :

$var1 = "[WT] Super Mario 3D Land #13 [100%]";
$var2 = "[WT] Super Mario 3D Land [100%]";

var_dump(strstr($var1, $var2));
Shadows, il y a 11 ans

J'ai oublié de les mettre dans le post mais à la base je récupère des données depuis des tableaux donc je récupère bien des chaîne de caractères.

Si tu essayes

var_dump(strstr($var1, $var2));

tu verras que ça retournes false c'est pour ça que je ne comprends pas.

Pakito, il y a 11 ans

Suis-je bête !! En fait c'est normal.

Dans la première chaîne, tu as un "#13" entre "Land" et "[100%]". Mais dans la deuxième tu ne l'as pas.

La fonction strstr() ne compare que des chaînes. Du coup, c'est normal que tu obtiennes false : il n'y pas la chaîne "[WT] Super Mario 3D Land [100%]" dans $var1.

Par contre, si tu essaies avec "[WT] Super Mario 3D Land", là ça fonctionne, et tu as bien un retour.

Shadows, il y a 11 ans

Merci à vous ! Par contre quelle est l'expression régulière pour virer "#$i" avec $i un nombre entier. Sachant que pour les chiffres c'est noté de la sorte : 01, 02, 03, 04 etc..

J'ai essayé ça mais ça a pas l'air de trop fonctionner.

'#\#.([0-9]{1,100})#i'
Pakito, il y a 11 ans

Hum, il me semble que tout bêtement tu peux faire un truc du type :

"/#.([0-9]+)/"

Ainsi on couvre toutes les chaînes composées d'un # suivi d'un ou plusieurs chiffre.

Shadows, il y a 11 ans

Okay merci, sujet résolu :)