Explode() sans explode()
Résolu
anthonyr_25
Messages postés
165
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je recode la function explode() sans utilisé de "built function".
J'arrive à stocker les valeurs une par une mais je n'arrive pas à stocker toutes les valeurs précédentes de mon indicateur
Par exemple j'aimerais stocker tout les mots mais je stock uniquement la dernière lettre
Egalement je n'arrive pas à atteindre la fin de la chaine pour l'exemple c'est le "i".
resultat : uaat
J'aimerais réussir à stocker toutes les valeurs précédent mon indicateur ainsi que la dernière valeurs, pourriez-vous m'aider ?
Je recode la function explode() sans utilisé de "built function".
J'arrive à stocker les valeurs une par une mais je n'arrive pas à stocker toutes les valeurs précédentes de mon indicateur
Par exemple j'aimerais stocker tout les mots mais je stock uniquement la dernière lettre
Egalement je n'arrive pas à atteindre la fin de la chaine pour l'exemple c'est le "i".
function fn_explode($ex, $var){ $array = ""; for ($i=0; $i < strlen($var); $i++) { if($var[$i] == $ex){ $array .= $var[$i-1]; } } return $array; } $tab = "coucou: sa: va: et: toi"; echo fn_explode(":", $tab);
resultat : uaat
J'aimerais réussir à stocker toutes les valeurs précédent mon indicateur ainsi que la dernière valeurs, pourriez-vous m'aider ?
Configuration: Windows / Chrome 100.0.4896.127
3 réponses
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.
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);
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
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...
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
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.