strpos avec un array ?

Petit nouveau ! | 1 Messages

15 juil. 2011, 11:35

Bonjour a tous :) je me suis inscrit sur ce forum car j'ai un petit soucis et j’espère que vous m'aiderais a le résoudre :)

J'explique, mon code :
$chaine = 'Bonjour, je sais ma chaine est merdique mais c\'est un exemple ...';
$find = array('chaine', 'exemple', 'bouh');
$pos = strpos($chaine, $find);

if ($pos === false) {
	echo 'Aucun mot n\'apparais ...';
} else {
	echo 'un mot interdit apparais dans la chaine :)';
}
Mais comme j'aime pas trop la fonction array() et que j'arrive pas trop a l'utiliser ... J'ai une erreur c'est que même si le mot apparais bah il me met qu'il n'apparais pas :/

Hypnoze57.

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

15 juil. 2011, 11:54

Hello ! Effectivement, le deuxième argument de strpos ne peut pas être un tableau mais doit être une chaine (ou à défaut un nombre) ...

Il faudrait donc soit tester chacun de tes mots un par un (avec un flag pour savoir s'lis ont été trouvé ou non)
$chaine = 'Bonjour, je sais ma chaine est merdique mais c\'est un exemple ...';
$find = array('chaine', 'exemple', 'bouh');

$erreur = false; // par défaut il n'y a pas d'erreur
foreach ($find as $mot) { // pour chaque mot
  if (strpos($chaine, $mot)===false) { // on test
    $erreur = true; // si le mot n'est pas trouvé on consigne l'erreur
    break; // on quitte la boucle...
  }
}

if ($erreur) { // en cas d'erreur 
  ... 
}
else { // en cas de succès
  ...
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 2278 Messages

15 juil. 2011, 17:06

mouaff, je jetterais un oeil, car je ne suis pas encore borgne, sur la fonction
in_array()
kelle me samble bien répondre à la couestion posatée.
Et pour la question à 10000000000000000 euros qui n'est pas posée, j'ajouterai qu'il faut s efamiliariser avec les tableaux qui sont moins compliqués qu'on pourrait croire en lisant la doc. car les tableaux associatifs ou pas c'est la même chose, et c'est un apport de Pascal à l'informatique que de disposer de tableaux où on n'est pas tenu de se souvenir à qui correspond la ligne 321 et dans quel numéro de colonne se trouve le numéro de téléphone de cet individu
En effet :
$t = array();
$t[1] = "calvados";
$t[2] = "champgne";
$t[3] = "cognac";
ou
$t = array( 1=>"calvados", 2=>"champagne", 3=> "cognac");
sont équivalentes.
maintenant on peut raffiner:
$
livre_de_cave = array();
$livre_de_cave['calvados'][1] = "Delalain";
$livre_de_cave['calvados'][2] = "Magloire";
$livre_de_cave['calvados'][2] = "Tagloire";
and so on...
moi j'ai pour un autre but:
il s'agit d'individus à affecter à des groupes différents:
for ($id =1; $id < $nb_affectables; $id++)
$affectables[$id]['id'] = $id; // la ligne $id du tableau indique que l'id de l'élève $id est $id
$affectables[$id]['sexe'] = $sexe; // la ligne $id du tableau indique que le sexe de l'élève $id est $sexe
$affectables[$id]['affectation'] = 0; // la ligne $id du tableau indique que l'affectation de l'élève $id est 0 (pas encore affecté)
$affectables[$id]['nom'] = $nom;// la ligne $id du tableau indique que le de l'élève $id est $nom
endfor;
Complètement hors-sujet, mais je maintiens
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD