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 :

parser un string pr en faire un tableau


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Points : 16
    Points
    16
    Par défaut parser un string pr en faire un tableau
    Bonjour,

    J'ai un petit soucis et j'aimerais vos lumières
    Je récupère un string relativement complexe et assez long( pr moi)

    Exemple tronqué:
    M120,M11|92,93,94,95,96,97,98,99,100|72,73,74,75,76,77,78,79,80

    Ce que je voudrais faire c parser ce string pour en faire un tableau manipulable.

    Les règles étant:

    Ce qui précède le premier | et qui commence donc par un M est un chapitre dirons nous. (séparé par une virgule)
    Ensuite, par exemple pour le chapitre M120 on veut lui associer les pages 92,93,94,95,96,97,98,99,100
    pour le chapitre suivant M11, on veut lui associer 72,73,74,75,76,77,78,79,80.

    Donc l'idée serait de faire un truc comme ca :

    M1,M2,M3|1,2,3|4,5,6|7,8,9

    M1 associé a 1,2,3 M2 à 4,5,6 et M3 à 7,8,9

    Le plus simple serait surement d'en faire un tableau associatif, mais j'arrive pas trop à m'y prendre.

    Merci de votre aide, et bonne année !!

  2. #2
    Membre du Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 26
    Points : 51
    Points
    51
    Par défaut
    voila un exemple de code:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $chaine="M120,M11|92,93,94,95,96,97,98,99,100|72,73,74,75,76,77,78,79,80";
     
    $tab=array();
     
     
    $separateur=strpos($chaine, '|');
    $chapitre=explode(',',substr($chaine,0,$separateur));
    $chaine=substr($chaine,$separateur+1);
     
     
    foreach($chapitre as $chap)
    {
    	$separateur=strpos($chaine, '|');
    	if ($separateur!=0)
    		$tab[$chap]=explode(',',substr($chaine,0,$separateur));
    	else
    		$tab[$chap]=explode(',',$chaine);
    	$chaine=substr($chaine,$separateur+1);
    }
     
    var_export($tab);
    je suis parti de ton exemple et j'ai laisser le var_export à la fin pour que tu puisses voir ce qu'il y a dans $tab.

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,
    tu peux aussi faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
     
    $array = 'M120,M11|92,93,94,95,96,97,98,99,100|72,73,74,75,76,77,78,79,80';
     
    $data = explode('|', $array);
    $chap = explode(',', $data[0]);
    $book = array();
    foreach($chap as $num) {
       $book[$num] = next($data);
    }
    print_r($book); // array("M120" => "92,93,94,95,96,97,98,99,100", "M11" => "72,73,74,75,76,77,78,79,80")
    ?>

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    nickel merci bien

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    très instructif, vu que je ne connaissais pas la fonction PHP "next" ; petite question pour améliorer ma compréhension : qu'est-ce qui fait qu'au premier appel de "next($data)", le pointeur du tableau soit initialisé sur $data[1] ?

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Non, next() ne réinitialise pas le pointeur. Comme chaque tableau à un pointeur interne, il se contente de partir de la dernière position connue.

    Ah, tryptan voulait un tableau de tableau, cela donne avec next():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
     
    $array = 'M120,M11|92,93,94,95,96,97,98,99,100|72,73,74,75,76,77,78,79,80';
     
    $data = explode('|', $array);
    $chap = explode(',', $data[0]);
    $book = array();
    foreach($chap as $num) {
       $book[$num] = explode(',', next($data));
    }
    Comme tu peux le voir, dans ce code, la dernière position utilisée dans le tableau $data est 0 donc le premier appel à next() renverra $data[1] et ainsi de suite...

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Merci pour l'explication.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/04/2010, 13h11
  2. [Tableaux] Faire un tableau à partir d'une string
    Par hugo69 dans le forum Langage
    Réponses: 2
    Dernier message: 05/01/2007, 10h49
  3. [DOM] Parser une string
    Par judi_kl dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 19/11/2004, 11h06
  4. [CR] comment faire un tableau croisé
    Par yoyothebest dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 29/08/2004, 18h32
  5. [DOM] parser une String pour en faire un document XML
    Par Fladnag dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 29/03/2004, 11h04

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