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
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".

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

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
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 :
$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.


1
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 à 21:33
Oui c'est exactement sa que je veux, mais bon je suis nul en explication haha ^^
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
0
jordane45 Messages postés 38380 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 janvier 2025 4 727 > anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022
20 avril 2022 à 21:37
c'est exactement sa que je veux
ça pas sa !

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...
1
anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 6 > jordane45 Messages postés 38380 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 janvier 2025
20 avril 2022 à 21:46
oui excuse moi pour l'orthographe ^^
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
0
jordane45 Messages postés 38380 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 janvier 2025 4 727 > anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022
20 avril 2022 à 21:50
Tu ne vois pas bien le fonctionnement.
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.
1
jordane45 Messages postés 38380 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 janvier 2025 4 727 > anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022
20 avril 2022 à 21:59
Il te manque juste une ligne avant le return ...
 $array[] = $index;
1
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
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);
0
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
Tu sais qu'avec un IF il existe aussi un else ?

0