| |||||
| Dernière réponse | |
|---|---|
| Sujet : [PHP] comment transformer un long string en array ? | |
| youdontcare | :)
j'ai oublié un truc, remplaces eval("$evalme" ); par eval($evalme); ... dans le premier cas il copie la string pour rien. |
| Aperçu |
|---|
| Vue Rapide de la discussion |
|---|
| youdontcare | :)
j'ai oublié un truc, remplaces eval("$evalme" ); par eval($evalme); ... dans le premier cas il copie la string pour rien. |
| duch | bon ben la méthode de j'm'en fous marche :D comme quoi j'm'étais pris la tête pour rien :D |
| duch | bon, j'vais essayer tout ça, merci les gars, mais partez pas...
faut qu'j'vois si ça marche :D |
| FLY LM | 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;" ); ?> |
| youdontcare | 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) |
| duch | 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. |
| FLY LM | 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...) ? |
| duch | 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. |
| youdontcare | t'évalues quoi exactement ? ou tu veux évaluer quoi ? |
| duch | 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... |
| duch | 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] |
| youdontcare | j'ai édité mon message car j'avais oublié le \ au début. reessaye. |
| duch |
|
| duch | et si je fait ça : eval($montableau = XSLtransformation); il ne voie pas que c'est un tableau, ça reste un string :sweat: |
| youdontcare | ? 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] |
| duch | 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 |
| duch | 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 |
| shinji | 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? |
| duch | 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\";" ); |




