2010-03-24 4 views
1

J'ai une chaîne comme ceci: $str1 = "mod 1 + mode 2 + comp 1 + toto". Je voudrais tester si mod 1 est en $str1. J'ai utilisé strpos mais cette fonction n'aide pas.Recherche d'une chaîne dans une autre chaîne

+0

Mais "mod 1 + mode 2 + comp 1 + toto" 'ne contient pas vraiment" "mod 1" '(notez les espaces). – kennytm

Répondre

5

strpos renvoie la position de l'apparition dans la chaîne commençant par 0 ou faux autrement. En utilisant simplement une conversion booléenne comme dans ce qui suit est une erreur commune:

$str1 = "mod 1 + mode 2 + comp 1 + toto"; 
if (strpos($str, "mod 1")) { 
    // found 
} 

Parce que dans ce cas strpos retournera 0. Mais 0 converti en booléenne est fausse :

var_dump((bool) 0 === false); // bool(true) 

Alors vous avez besoin à utiliser une comparaison stricte:

$str1 = "mod 1 + mode 2 + comp 1 + toto"; 
if (strpos($str, "mod 1") !== false) { 
    // found 
} 

C'est aussi ce que la documentation conseille:

Avertissement Cette fonction peut retourner FALSE, mais elle peut aussi retourner une valeur non booléenne qui évalue à FALSE, comme 0 ou « ». Veuillez lire la section sur Booleans pour plus d'informations. Utilisez le === operator pour tester la valeur de retour de cette fonction.

+0

Oui, je vois, mais l'utilisation de cela, retourne toujours faux! Je vais essayer encore et posterai merci les gars – Mamadou

1

Vous pouvez utiliser la fonction strstr.

$str1 = "mod 1 + mode 2 + comp 1 + toto"; 
$str2 = "mod 1"; 

if(strstr($str1,$str2) !== false) 
echo "Found $str2 in $str1\n"; 
+0

c'est merveilleux, !! – Mamadou

+0

@Mamadou: Ce code fonctionne, mais vous devriez passer par la réponse de 'Gumbo' et essayer de comprendre pourquoi les' strpos' que vous avez essayé n'ont pas fonctionné. – codaddict

Questions connexes