Explode() sans explode()
Résolu/Fermé
anthonyr_25
Messages postés
165
Date d'inscription
mercredi 5 janvier 2022
Statut
Membre
Dernière intervention
6 juillet 2022
-
Modifié le 20 avril 2022 à 20:07
jordane45 Messages postés 38380 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 janvier 2025 - 20 avril 2022 à 22:29
jordane45 Messages postés 38380 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 janvier 2025 - 20 avril 2022 à 22:29
3 réponses
jordane45
Messages postés
38380
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2025
4 727
20 avril 2022 à 21:21
20 avril 2022 à 21:21
Bonjour,
Je n'ai pas compris ce que tu veux réellement faire...
La fonction explode ne donne pas qu'un seul caractère avant le séparateur... il découpe la chaine en array, chaque entrée de cet array étant l'ensemble des caractères ...
En gros
avec ton :
ça donne
Tu dois donc concaténer toutes les valeurs jusqu'à tomber sur ton caractère séparateur, puis stocker dans un array..
et ainsi de suite sur toute la longueur de la chaine
Au passage, pour aller jusqu'au bout de la chaine, tu peux utiliser <= au lieu de juste < dans ton for.
Je n'ai pas compris ce que tu veux réellement faire...
La fonction explode ne donne pas qu'un seul caractère avant le séparateur... il découpe la chaine en array, chaque entrée de cet array étant l'ensemble des caractères ...
En gros
avec ton :
$tab = "coucou: ça: va: et: toi";
ça donne
Array( 0=>"coucou" 1 => "ça" 2 => "va" 3 => "et" 4 => "toi" )
Tu dois donc concaténer toutes les valeurs jusqu'à tomber sur ton caractère séparateur, puis stocker dans un array..
et ainsi de suite sur toute la longueur de la chaine
Au passage, pour aller jusqu'au bout de la chaine, tu peux utiliser <= au lieu de juste < dans ton for.
anthonyr_25
Messages postés
165
Date d'inscription
mercredi 5 janvier 2022
Statut
Membre
Dernière intervention
6 juillet 2022
6
20 avril 2022 à 22:29
20 avril 2022 à 22:29
C'est bon :
/* explode — Scinde une chaîne de caractères en segments */ function fn_explode($ex, $var){ $array = []; $index = ""; for ($i=0; $i <= strlen($var); $i++) { if($var[$i] == $ex){ echo $index; $array[] .= $index; $index = ""; } else { $index .= $var[$i]; } } $array[] = $index; return print_r($array); } $tab = "coucou: ça: va: et: toi"; echo fn_explode(":", $tab);
jordane45
Messages postés
38380
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2025
4 727
20 avril 2022 à 22:29
20 avril 2022 à 22:29
Tu sais qu'avec un IF il existe aussi un else ?
20 avril 2022 à 21:33
Et mon problème c'est que justement je choppe que le premier caractère à chaque fois ..
Je viens d'essayer le <= au lieux du < mais vue qu'il n'y as pas de séparateur il ne prend pas en compte le dernier mot
20 avril 2022 à 21:37
cette parenthèse étant faite, pour que tu parviennes à réaliser ton code... sache qu'avant d'écrire du code ... il faut déjà savoir formuler l'algorithme ....
Donc, avec des phrases ... essaye de nous expliquer les étapes que ton code doit réaliser...
20 avril 2022 à 21:46
Avec des phrase j'aimerais :
- parcourir la chaine
- si la valeur correspond à mon séparateur
- alors ajouter les valeurs précédentes dans le premiere index de ma variable array
- puis continuer à parcourir ma chaine
- si je tombe encore sur mon séparateur ajouter les valeurs précédentes avant le premier séparateur dans le deuxième index de mon tableau
- etc ..
- si il n'y as plus de séparateur ajouter les valeurs précédentes dans le dernière index du tableau
- puis retourner le tableau
20 avril 2022 à 21:50
Tu ne dois pas attendre de trouver le séparateur pour récupérer le contenu ...
Tu dois parcourir la chaine
A chaque tour de boucle, stocker (concaténer en string ) les valeurs dans une variable
Dès que tu tombes sur un séparateur, mettre la valeur concaténée dans un array, vider la variable concaténer et poursuivre jusqu'au prochain séparateur et/ou la fin de la chaine.
et enfin, retourner l'array.
20 avril 2022 à 21:59