IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Découpe chaine de caractere et boucle


Sujet :

Langage PHP

  1. #1
    Membre actif
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 290
    Points : 209
    Points
    209
    Par défaut Découpe chaine de caractere et boucle
    Bonsoir,

    Je ne sais pas commet faire pour découper correctement ma chaine de caractere qui se présente comme cela :

    Legende :
    $$chaine du produit$$
    @caracteristiques@

    Par exemple (dans la BDD) :
    $$%Cola%@1.30@$$$$%Jus d'orange%@0.80@$$

    J'ai pensé a faire un premier explode pour les $$chaine de produit$$ puis faire une boucle autant de fois qu'il y en a, pour décomposer le reste dans ces dernieres,... mais je n'arrive pas à créer les critères de la boucle.

  2. #2
    Membre actif
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 290
    Points : 209
    Points
    209
    Par défaut
    Il y a plus simple a mon avis, je prefere rester sur l'explode

    $chaines_de produit = explode('$$','$chaine');

    Puis je boucle autant de fois qu'il y a de $chaines_de produit

    mais je ne sais pas de quelle manière appliquer la boucle.
    J'ai essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while($chaines_de_produit)
    {
    explode('@','$chaines_de_produit');
    etc etc ...
    }
    Mais évidemment jai une boucle infini et pas le resultat voulu ^^

  3. #3
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Essai ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $r = '/\$\$([^@]+)@([^@]+)@\$\$/';
    preg_match_all($r, $s, $m, PREG_SET_ORDER);
    print_r($m);

  4. #4
    Membre actif
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 290
    Points : 209
    Points
    209
    Par défaut
    C'est barbare, c'est quoi la traduction ?
    J'ai un array vide comme résultat.

    Voila exactement le genre de chaine que j'utilise :

    $$@@224455@@Coca cola@@Produit@@153.00@@137.7@@10@@$$$$@@335566@@Pepsi cola@@Produit@@25.00@@20@@20@@$$


    Jai essayé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $r = '/\$\$([^@]+)@([^@]+)@([^@]+)@([^@]+)@([^@]+)@([^@]+)@\$\$/';
    preg_match_all($r, $donnees2['produits'], $m, PREG_SET_ORDER);
    print_r($m);

  5. #5
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Effectivement mon premier pattern ne va pas fonctionner s'il y a un nombre indéterminé de sous chaînes "@blah@" (et non pas seulement 2).

    Une solution générique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $r = '/\$\$@(.*?)@\$\$/';
    preg_match_all($r, $s, $m, PREG_SET_ORDER);
    foreach ($m as &$a) {
      print_r(explode('@@', trim($a[1], '@')));
    }
    Et s'il n'y a toujours que 6 sous chaînes, ceci doit être ok:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $r = '/\$\$@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@([^@]+)@@\$\$/';
    preg_match_all($r, $s, $m, PREG_SET_ORDER);
    print_r($m);

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Très belle solution générique.
    Je me demande seulement le pourquoi du trim.
    N'est-ce pas aussi simple ainsi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $r = '/\G\$\$@@(.*?)@@\$\$/';
    preg_match_all($r, $myString, $m, PREG_SET_ORDER);
    print_r($m);
    foreach ($m as &$a) {
      print_r(explode('@@', $a[1]));
    }
    Et encore, le \G est à priori inutile, mais au cas où...

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    PLus une version à base d'explode (moins classe , mais la fin justifie les moyens)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $myString = "$$@@224455@@Coca cola@@Produit@@153.00@@137.7@@10@@$$$$@@335566@@Pepsi cola@@Produit@@25.00@@20@@20@@$$";
    // je retire les $$ en début et fin
    $myString = trim($myString, '$$');
    // j'explose
    $myArray = explode('$$$$', $myString);
    foreach($myArray as $myElem) {
        // même principe, mais en boucle
    	$myElem = trim($myElem, '@@');
    	$myArray2 = explode('@@', $myElem);
    	print_r($myArray2);
    }

  8. #8
    Membre actif
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 290
    Points : 209
    Points
    209
    Par défaut
    Super ! merci beaucoup ! ça fonctionne très bien

  9. #9
    Membre actif
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 290
    Points : 209
    Points
    209

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. pb de boucle sur chaine de caracteres dans une jointure
    Par cana13 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/08/2009, 11h10
  2. boucle avec chaine de caracteres
    Par reapa dans le forum C
    Réponses: 7
    Dernier message: 12/07/2008, 20h18
  3. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  4. [LG]comparaison de chaines de caracteres
    Par thesam dans le forum Langage
    Réponses: 6
    Dernier message: 20/05/2003, 22h41
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo