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 :

[Tableaux] Transformer une chaine en array


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Par défaut [Tableaux] Transformer une chaine en array
    Bonjour,

    Je suis en train de créer un array à plusieurs dimensions à partir d'une chaine de caractère, en gros je pars de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    300415 (103901 (100603 ((3,7 3,52 3,42 3,33 3,29)) 100601 ((3,76 3,57 3,48 3,38 3,34))))
    Pour obtenir cette nouvelle chaîne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(300415 => array(103901 => array(100603 => array( "vide" => array(3.7,3.52,3.42,3.33,3.29)),100601 => array( "vide" => array(3.76,3.57,3.48,3.38,3.34)))))
    Jusque là tout va bien, sauf que je me retrouve avec une chaine de caractère, et je n'arrive pas à la "transformer" en array.

    J'ai bien essayé settype en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = settype($chaine, "array");
    , mais il me retourne un booléen....

    Comment faire pour transformer cette chaine en array ? (si je suis bien clair !)

    Merci d'avance !

  2. #2
    Membre chevronné Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Par défaut
    normal puisque cette fonction prend la variable en référence c'est à dire que le changement se fait directement à l'adresse de celle-ci, et elle retourne un booléen, seulement tu assignes la valeur de retour de la fonction à la variable qui vient juste de changer de type grâce à la fonction..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    settype($chaine,'array');
    var_dump($chaine);
    c'est suffisant

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Par défaut
    Je te remercie pour ta réponse rapide !

    Mais ça ne fonctionne pas, var_dump me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(1) { [0]=> string(159) "array(300415 => array(103901 => array(100603 => array( "vide" => array(3.7,3.52,3.42,3.33,3.29)),100601 => array( "vide" => array(3.76,3.57,3.48,3.38,3.34)))))" }
    Alors effectivement c'est un tableau, mais pas comme je l'aurais souhaité !

    Mais merci quand même pour l'explication pour settype !

  4. #4
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Par défaut
    Pour ma part, je le ferais avec une boucle qui détecte les parenthèses ouvrantes et fermantes et les virgules, mais c'est plus un problème d'algorithmique que de syntaxe php.

    Edit : j'avais mal compris, je croyais que tu voulais obtenir la chaîne avec les "array"

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Par défaut
    J'ai trouvé la solution à mon problème.

    il suffit que j'utilise la fonction eval() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $chaine = '$test = array(300415 => array(103901 => array(100603 => array( "vide" => array(3.7,3.52,3.42,3.33,3.29)),100601 => array( "vide" => array(3.76,3.57,3.48,3.38,3.34)))));';
    eval($chaine);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $test[300415][103901][100603]["vide"][2];
    retourne "3.48"

    Merci pour votre aide.

  6. #6
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Par défaut
    Bonjour a tous,

    Peut etre que la fonction create_function() pourrais t'aider.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $Zarray='array(300415 => array(103901 => array(100603 => array( "vide" => array(3.7,3.52,3.42,3.33,3.29)),100601 => array( "vide" => array(3.76,3.57,3.48,3.38,3.34)))))';
    $newfunc = create_function('', '$my_array='.$Zarray.'; return $my_array;');
     
    print_r($newfunc());
     
    ?>
    [EDIT]Plus tranquille la vie :p[/EDIT]

  7. #7
    Membre chevronné Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Par défaut
    Je ne connaissais pas cette fonction, bien pratique ^^
    personnellement j'aurais utilisé les regexp, mais c'est ptet plus rapide en terme de temps d'exécution de procéder de cette façon, les regexp étant gourmande.

    edit: lol, c'est vrai que y'a aussi eval() .. mais je trouve ça moins propre que create_function()
    en tout cas, je trouve ça inutile de passer par une chaîne pour ensuite le construire, si tu as pu construire ta chaîne tu aurais pu construire l'array directement.. et si ta chaîne est toute faite, encore une raison de plus de le construire directement, à moins que tu ai besoin de retrouver la structure du tableau sous forme de chaîne.

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

Discussions similaires

  1. transformer une chaine de caracteres en image
    Par jsunnyduckk dans le forum 2D
    Réponses: 7
    Dernier message: 16/02/2007, 14h51
  2. transformer une chaine de caracteres en du code
    Par giova_fr dans le forum C++
    Réponses: 6
    Dernier message: 15/01/2006, 16h37
  3. [Tableaux] decouper une chaine de caractères
    Par pekka77 dans le forum Langage
    Réponses: 12
    Dernier message: 03/12/2005, 19h08
  4. Réponses: 2
    Dernier message: 03/10/2005, 16h23
  5. Réponses: 2
    Dernier message: 14/01/2005, 15h40

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