Bonjour,
Je cherche à créer une page en PHP pour une recherche d'un mot dans un tableau ($mots) à partir quelques lettres dans le désordre posté dans un formulaire.
J'ai pensé à plusieurs solutions comme:
1/utilisé les expressions régulières du type "[abc]": chaîne qui contient un "a", un "b", ou un "c"
2/découper la chaîne ($_POST['lettres_user']) en caractères, placer ces caractères dans un tableau neutre et comparer les 2 tableaux par l'occurence des mots.
3/La 3ème solution me paraît meilleur depuis que j'ai découvert : count_chars
Voilà où j'en suis dans le code :
Code PHP :
<body>
<form action="test.php" method="post">
<input type='text' name='lettres_user' size=10 value='' />
<input type="submit" value="Envoyer" />
</form>
<?php
$mots = array('pirate','voile','bateau','canon');
if (isset($_POST['lettres_user']))//si quelque chose est posté
{
$lettres_user = htmlentities ($_POST['lettres_user'], ENT_QUOTES);
for($i=0;$i<sizeof($mots);$i++){//pour tout les mots du tableaux
foreach (count_chars($_POST['lettres_user'], 1) as $a => $val_user){//rechercher occurence des lettres de lettres_user
foreach (count_chars($mots[$i], 1) as $b => $val_mots){//rechercher occurence des lettres des mots
if ( ($val_mots == $val_user) && ( chr($b) == chr($a) ) ){//condition d'égalité des recherches
echo $mots[$i].'<br />';
}}}}}
?>
</body>
si je poste "v" , ça retourne bien "voile"
si je poste "p" , ça retourne bien "pirate"
si je poste "b" , ça retourne bien "bateau"
si je poste "i" , ça retourne bien "voile" et "pirate"
si je poste "aa" , ça retourne bien "bateau"
mais...
si je poste "oi" , ça retourne "pirate" "voile" "voile" "canon"
si je poste "pitr" , ça retourne "pirate" "pirate" "pirate" "pirate" "voile" "bateau"
là ! je pige pas !???
Visiblement la recherche se fait lettres par lettres d'où la répétion et les mots qui ne sont pas sensés sortir.