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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    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 éclairé
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 26
    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 confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    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 averti
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Par défaut
    nickel merci bien

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    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 confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    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
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    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