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


Shadows
Auteur
Réponse acceptée

Okay merci, sujet résolu :)

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
Auteur

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.

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
Auteur

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'

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.