Bonjour,
Je travaille sur une API affichant toutes les voies de Paris et quelques détails sur elles (6523 entrées en tout).
J'ai mis un champ texte dans lequel le visiteur tapera la voie dont il voudra les détails.
Lorsque le nom total de la voie est tapé avec la casse respectée, tout fonctionne très bien, j'affiche parfaitement ce que je veux.
J'essaie de donner la possibilité d'afficher les résultats simplement avec une partie de la chaîne de caractères.
Par exemple si on recherche les détails sur l'avenue des Champs-Elysées que l'on puisse l'avoir en tapant par exemple "elysées".
J'ai donc essayé deux fonctions
if (mb_strpos($_POST['voies'], $select['fields']['typo_min'])===false){
echo "";
}else{
if (array_key_exists('typo_min', $select['fields'])) {
echo '<p>La ' . $select['fields']['typo_min'];
}
}
if (str_contains($_POST['voies'], $select['fields']['typo_min'])){
if (array_key_exists('typo_min', $select['fields'])) {
echo '<p>La ' . $select['fields']['typo_min'];
}
}
$_POST['voies']
correspond à ce qu'entre le visiteur dans le formulaire (par exemple elysées)
$select['fields']["typo_min"]
correspond au nom de la voie tel qu'il est entré dans l'API (par exemple avenue des Champs-Elysées).
si on prend pour exemple : avenue des Champs-Elysées
"avenue des Champs-Elysées" fonctionne
"Avenue des Champs-Elysées" ou bien "avenue des champs-Elysées" ou bien "Elysées" ne fonctionnent pas
Mon code contient un array_key_exist
pour vérifier l'existence de la clé dans l'API (j'ai essayé en le supprimant pour voir si ce n'est pas lui qui me posait problème et mon souci perdure)
Pour le mb_strpos
j'ai aussi essayé sans le mb_ (pour le 1er echo j'ai mis un espace car lorsque la voie n'est pas trouvée - donc lorsqu'elle n'est pas tapée comme elle l'est dans l'API - le message est affiché autant de fois qu'il y a d'entrées donc dans le cas présent 6523 fois).
Me suis-je trompé en utilisant la fonction ?
Existe t-il une fonction qui permet d'obtenir une chaîne de caractère en fonction d'une partie de cette chaîne (en ne différenciant pas la casse) ?
Voila, j'espère avoir donné suffisamment de détails,
Merci pour votre possible aide
Michel
Bonjour,
Comment remplis-tu ce "$select" ?
Si c'est dans une BDD, tu peux utiliser "LIKE" en sql
Bonjour,
Non justement ce n'est pas une BDD mysql, j'utilise une API JSON. j'ai donc utilisé un json_decode et ensuite une boucle foreach (j'ai défini le $select dans cette boucle).
Voici le code
$urlSelect = file_get_contents('url API');
$apiSelect = json_decode($urlSelect, true);
foreach ($apiSelect['records'] as $select) {
if (strpos($_POST['voies'], $select['fields']['typo_min'])===false){
echo "";
}else{
if (array_key_exists('typo_min', $select['fields'])) {
echo '<p>La ' . $select['fields']['typo_min'];
}
}
d'accord
il faudrait dans ce cas utiliser la fonction stripos (qui est insensible à la casse)
c'est la piste que j'explorerais
Bon finalement j'ai fait autrement.
J'ai récupéré tous les enregistrements de l'API dans une base de données mysql (j'ai maintenant une bdd avec des infos sur 6523 rues de Paris. Mon XAMPP ça lui a fait bizarre lol)
Ce qui me permet d'utiliser le like (j'ai implémenté un moteur de recherche sur la base).
Merci pour tes réponses