[PHP] comment transformer un long string en array ?

comment transformer un long string en array ? [PHP] - Programmation

Marsh Posté le 15-06-2001 à 18:10:36    

la question peut paraitre débile, mais j'ai pô trouver... voici le string à transformer :  
 
comme le copier-coller ne marche pas bien sur KDE :gun:, j'en retape un bout :  
 
 
"PNB" => array (
    "valeur" => array (
        "nom" => array ("I","II","III","IV","I","II","III","IV" ),
        "val" => array (54,6,15,564,4656,3645,54,021,54,21,54)
     )
)
 
 
voilà ça c'est ch'ti bout
 
en fait c'est le résultat d'un parser XSL, comme vous pouvez le voir c'est exactement le format utiliser pour déclarer un tableau, donc j'mettais dit qu'avec eval ça allais marcher, et ben non. Ou alors j'me suis planter dans la syntaxe du eval (faut dire que c'est un peu bizarre comme syntaxe)
 
eval("\$montableau = "\onstring\";" );

Reply

Marsh Posté le 15-06-2001 à 18:10:36   

Reply

Marsh Posté le 16-06-2001 à 17:20:30    

c'est une faute de frappe ou pas le "eval("\$montableau = "\onstring\";" );" . C'est pas longstring ?
 Sinon essaye avec explode (coupe une chaîne selon un séparateur et crée un tableau avec les éléments entre séparateur?

Reply

Marsh Posté le 19-06-2001 à 10:30:21    

j'vais vérifier pour la faute de frappe mais j'crois pas, là j'suis sous windows, donc il faut que je rebbot sous linux :gun:
 
sinon j'ai pas trop envie d'utiliser explode puisque cette chaine est exactement celle qu'il faudrait utiliser pour créer un grand tableau. Mais j'comprends rien à la syntaxe de eval en php, c'est tordu :D

Reply

Marsh Posté le 19-06-2001 à 12:59:37    

bon mon eval c'est ça :  
 
eval("\$montableau = "\XSLtransformation\";" );"
 
et ça donne ça :
 
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /home/sites/home/web/oreilly/graph.php on line 22
 
Parse error: parse error in /home/sites/home/web/oreilly/graph.php on line 22

Reply

Marsh Posté le 19-06-2001 à 13:06:52    

? le '\' est utilisé pour coder des caractères.
\n = retour à la ligne
\t = tab
\" = " dans une string définie comme " .... "
\' = ' dans une string définie comme ' .... '
et du coup pour déclarer un \, c'est \\
\\ = \
 
donc ton eval devrait être eval("\$montableau = \"XSLTransformation\";" );

 

[edit]--Message édité par youdontcare--[/edit]

Reply

Marsh Posté le 19-06-2001 à 13:09:19    

et si je fait ça :  
 
eval($montableau = XSLtransformation);
 
il ne voie pas que c'est un tableau, ça reste un string :sweat:

Reply

Marsh Posté le 19-06-2001 à 13:10:31    

youdontcare a écrit a écrit :

? le '\' est utilisé pour coder des caractères.
\n = retour à la ligne
\t = tab
\" = " dans une string définie comme " .... "
\' = ' dans une string définie comme ' .... '
et du coup pour déclarer un \, c'est \\
\\ = \
 
donc ton eval devrait être eval("$montableau = \"XSLTransformation\";" );




 
ça donne ça : Parse error: parse error in /home/sites/home/web/oreilly/graph.php(22) : eval()'d code on line 1

Reply

Marsh Posté le 19-06-2001 à 13:12:52    

j'ai édité mon message car j'avais oublié le \ au début. reessaye.

Reply

Marsh Posté le 19-06-2001 à 13:14:54    

Parse error: parse error in /home/sites/home/web/oreilly/graph.php(22) : eval()'d code on line 3
 
remarque, c'est plus en line1 mais en line3 :D
 
ce qui voudrais dire que le problème viens du code à évalué, mais c'est marrant car j'ai fais un copier-coller du code renvoyé direct dans le script et il est valide :gun:, doit y avoir un blème de retour chariot ou autre...

 

[edit]--Message édité par duch--[/edit]

Reply

Marsh Posté le 19-06-2001 à 13:18:05    

le code, c'est ça :
 
 
 $graph = array (
                "titre" => "PIB selon population",
                "liste" => array (
                 
                        "PIB" => array (
                         
                                                "groupe" => array (
                                                 
                                                        "1999" => array (
                                                                "nom" => array ("J","F","M","A","M","J","J","A","S","O","N","D" ),
                                                                "val" => array (54,54,-54,0,54,54,54,54,54,54,54,54)
                                                        ),
                                                        "2000" => array (
                                                                "nom" => array ("J","F","M","A","M","J","J","A","S","O","N","D" ),
                                                                "val" => array (54,54,-54,0,54,54,54,54,54,54,54,54)
                                                        )
                                                )
                                         
                                        ),
                        "PNB" => array (
                         
                                        "valeur" => array (
                                                "nom" => array ("I","II","III","IV","I","II","III","IV" ),
                                                "val" => array (54,54,54,54,54,54,54,54)
                                        )
                                        )
                                )
 
);
 
 
et ça ça marche nickel qd tu le mets direct dans le fichier php...

Reply

Marsh Posté le 19-06-2001 à 13:18:05   

Reply

Marsh Posté le 19-06-2001 à 13:18:50    

t'évalues quoi exactement ? ou tu veux évaluer quoi ?

Reply

Marsh Posté le 19-06-2001 à 14:14:00    

bah en fait c'est simple, ce que je veux évaluer c'est la loooooongue chaine que tu vois au post précedent. J'aimerais la transformer en un array, c'est out. Sachant qu'elle a déjà la tronche d'un array.

Reply

Marsh Posté le 19-06-2001 à 14:41:52    

Y a un truc qui doit m'échapper mais bon,
 
->Ca, c'est ta chaine qui t'ennuie :
 
"PNB" => array (  
    "valeur" => array (  
        "nom" => array ("I","II","III","IV","I","II","III","IV" ),  
        "val" => array (54,6,15,564,4656,3645,54,021,54,21,54)  
     )  
)  
 
-> Tu peux affecter cette chaine à une variable ?
 
$pnb = '"PNB" => array (  
    "valeur" => array (  
        "nom" => array ("I","II","III","IV","I","II","III","IV" ),  
        "val" => array (54,6,15,564,4656,3645,54,021,54,21,54)  
     )  
)';
 
$pnb = array($pnb);
 
La ca marche, non (enfin, c'est la même chose que ton code PHP qui tourne...) ?

Reply

Marsh Posté le 19-06-2001 à 14:46:57    

Bon soit c'est moi qui m'exprime mal, soit y'a un blème quelque part, la chaine que je veux évaluer c'est TOUT!!!
 
ok?
 
comme vous pouvez le voir c'est un tableau, en théorie car pour l'instant ce n'est qu'un string et moi je veux le transformer en tableau. Point barre
 
en gros je veux évaluer une portion de code qui a été générée par autre chose que php et qui la définition de mon tableau.

Reply

Marsh Posté le 19-06-2001 à 15:48:21    

wep tt à l'heure j'étais totalement à l'ouest :D
 
bon, j'ai php4, ça marche.
 
 $evalme = '$graph = array (  
     "titre" => "PIB selon population",  
     "liste" => array (  
                 
       "PIB" => array (  
                         
             "groupe" => array (  
                                                 
               "1999" => array (  
                 "nom" => array ("J","F","M","A","M","J","J","A","S","O","N","D" ),  
                 "val" => array (54,54,-54,0,54,54,54,54,54,54,54,54)  
               ),  
               "2000" => array (  
                 "nom" => array ("J","F","M","A","M","J","J","A","S","O","N","D" ),  
                 "val" => array (54,54,-54,0,54,54,54,54,54,54,54,54)  
               )  
             )  
                                         
           ),  
       "PNB" => array (  
                         
           "valeur" => array (  
             "nom" => array ("I","II","III","IV","I","II","III","IV" ),  
             "val" => array (54,54,54,54,54,54,54,54)  
           )  
           )  
         )  
 
 ); ';
 
eval("$evalme" );
var_dump($graph);
 
 
et hop, j'ai ton tableau.
je sais pas comment tu passes ta chaîne à eval, mais mal, certainement. si tu déclares une string entre doubles quotes " ... " les variables à l'intérieur sont évaluées. en singles quotes ' ... ', non.
 
donc si tu faisais un truc genre $xsloutput = "$graph = array"; puis eval($xsloutput) ça ne marchait pas car il évaluait 'graph' dans la première string.
 
ah moins que ce soit pas ça du tout :D  
 
mais bon, ça devrait marcher avec ça (ça roule chez moi)

Reply

Marsh Posté le 19-06-2001 à 16:00:24    

Un chtit exemple qui fonctionne :
 
<?php
 
$string = '"fruits"  => array(
    "id" => array(1,2,3),
    "desc" => array(banane,pomme,poire)
    )';
     
$string = 'array('.$string.')';
 
 
eval("\$fruits = $string;" );
 
?>

Reply

Marsh Posté le 19-06-2001 à 17:30:33    

bon, j'vais essayer tout ça, merci les gars, mais partez pas...
 
faut qu'j'vois si ça marche :D

Reply

Marsh Posté le 19-06-2001 à 17:34:11    

bon ben la méthode de j'm'en fous marche :D comme quoi j'm'étais pris la tête pour rien :D

Reply

Marsh Posté le 19-06-2001 à 18:02:17    

:)
 
j'ai oublié un truc, remplaces eval("$evalme" ); par eval($evalme);  ... dans le premier cas il copie la string pour rien.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed