Utiliser la fonction str_starts_with avec un array
Ferméjordane45 Messages postés 38456 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 26 mars 2025 - 31 mai 2023 à 23:34
3 réponses
Modifié le 31 mai 2023 à 00:15
Tu as un code qui est celui la
$tel_array = array('32' => 'Belgique', '33' => 'France', '34' => 'Espagne', '41' => 'Suisse', '44' => 'Royaume-Uni', '49' => 'Allemagne'); foreach($tel_array as $pays => $code) { str_starts_with($tel, $pays); }
Je te dis.. tu fais quoi de ta ligne 11 ? .. il faudrait la mettre dans un IF ...
La ligne 11 étant
str_starts_with($tel, $pays);
... regarde donc la doc de cette fonction.. il y a des exemples : https://www.php.net/manual/en/function.str-starts-with.php
Donc.. on pourrait s'attendre à ce que tu modifie cette ligne sous la forme
if( str_starts_with($tel, $pays) ) { // Si la chaine commence par... // .. ici tu fais ce que tu veux quand la condition se vérifie ! // par exemple... echo "Pays :" . $pays . " => " . $code; break;//on sort de la boucle }
NB: Attention ... +33601020304 .. ça ne commence pas par "33" ... mais par "+33" ...
24 mai 2023 à 01:26
Bonjour
Quand tu as un doute sur le fonctionnement d'une fonction, il faut aller regarder le doc
https://www.php.net/manual/en/function.str-starts-with.php
26 mai 2023 à 08:16
Bonjour jordane45,
Merci pour ta réponse, en effet, je croyais naïvement qu'un array était supporté par cette fonction.
Depuis j'ai avancé un peu et me suis résolu à faire une boucle, ce qui me semble le plus simple encore, étant donné l'état de mes connaissances en PHP.
Sur la structure de ma boucle je crois qu'elle est globalement pas trop mauvaise, mais je n'arrive pas à en afficher le résultat surtout.
Voici le code que j'ai mis en place, mais je n'arrive pas à afficher à la fin l'indicatif correspondant au numéro que j'ai entré, ni le pays :
$tel = '+33601020304'; $tel = preg_replace('/[^0-9]/', '', $tel); //33601020304 $tel = ltrim($tel, '0'); //33601020304 $tel_array = array('32' => 'Belgique', '33' => 'France', '34' => 'Espagne', '41' => 'Suisse', '44' => 'Royaume-Uni', '49' => 'Allemagne'); foreach($tel_array as $pays => $code) { str_starts_with($tel, $pays); }
L'idée étant d'afficher le nom du pays en fonction de l'indicatif trouvé au début de la chaîne après avoir testé tous les indicatifs de l'array.
Mais je sèche complètement sur la partie récupération du résultat de la boucle et affichage. Peut-être faudrait-il ensuite faire un switch pour afficher le nom du pays en fonction de l'indicatif ?
Bonne journée
polarbird
26 mai 2023 à 08:49
Tu fais quoi de ta ligne 11 ?
Il faudrait l'utiliser dans un IF ... et si la condition est vérifiée, sortir de la boucle
30 mai 2023 à 22:57
Bonsoir jordane45,
Justement, je ne vois pas très bien comment on peut vérifier la condition dans la mesure où il y a plusieurs valeurs...
J'ai essayé de mettre en place une condition pour vérifier si la valeur de tel commence bien par une des valeurs de l'array :
if(array_key_exists($pays, $tel_array)){ echo 'OK'; }else{ echo 'PB'; } if(in_array($pays, $tel_array)){ echo 'OK'; }else{ echo 'PB'; }
Lorsque j'entre comme tel +33601020304, la première condition me renvoie OK et la seconde PB. Et le résultat est identique lorsque j'entre un numéro commençant par +55 par exemple (indicatif qui n'est pas dans l'array.
C'est pourquoi je suis totalement perdu...
31 mai 2023 à 21:57
Bonsoir jordane45, merci beaucoup pour ta réponse.
J'ai regardé la doc il y a plusieurs jours déjà, mais elle ne supporte pas encore array, c'est pourquoi j'étais parti sur un foreach, qui traite les données une par une.
Lorsque j'essaie ton code avec le 33601020304, j'obtiens le résultat suivant :
La boucle if n'arrive pas à traiter les données de l'array on dirait, même si ton intuition m'a l'air pertinente.
NB : si, cela commence bien par 33, car la ligne
permet d'ôter le + et d'avoir un numéro "propre", comme dans les liens WhatsApp par exemple.
31 mai 2023 à 23:34
Ne te reste plus qu'à mettre un peu de debug à l'intérieur de ta boucle sur les différentes variables pour voir quels sont leurs valeurs au moment où le écho s'affiche