Transformer un tableau php en tableau javascript

Soyez le premier à donner votre avis sur cette source.

Vue 30 073 fois - Téléchargée 906 fois


Description

Bonjour tous le monde...

On m'a posé une petite question sur ce site : "Comment créer un tableau mutlidimensionel et associatif en Javascript à partir d'un tableau PHP ?"

STOP -------------------------
STOP Depuis php5.2, il existe json_encode (http://fr.php.net/json_encode)...
STOP Donc ce code est inutile !
STOP -------------------------

De cette discussion, il résulte la fonction php2js() suivante. Je la mets brutalement ici car les retours à la ligne ne passent pas dans le forum.
Et puis, qui sait, peut-être cela pourra-t'il servir à d'autres personnes...

La source est commentée.

Bye-bye!

Source / Exemple :


<?php

// Ci dessous, la fonction php2js et son utilisation dans la foullée

/*
C'est ce qu'on appelle de "L'extrem programming", c'est à dire du code craché en 20 minutes... n'y perdez pas vos yeux ;)
...
Le but :
transformer un tableau PHP, même mutli-dimensionnel, en un tableau JS
!!! Ce tableau ne doit pas contenir d'objet ou ressource PHP !!! (pas de contrôle, mais le script JS plantera)

En entree :
(array) $php_array => le tableau PHP à traduire en JS
(STRING) $js_array_name => le nom du tableau JS qui sera construit

En sortie :
(string) => le script JS permettant la construction du tableau

En cas d'erreur :
retourne FALSE et une erreur de type E_USER_NOTICE est generée

  • /
function php2js( $php_array, $js_array_name ) { // contrôle des parametres d'entrée if( !is_array( $php_array ) ) { trigger_error( "php2js() => 'array' attendu en parametre 1, '".gettype($array)."' fourni !?!"); return false; } if( !is_string( $js_array_name ) ) { trigger_error( "php2js() => 'string' attendu en parametre 2, '".gettype($array)."' fourni !?!"); return false; } // Création du tableau en JS $script_js = "var $js_array_name = new Array();\n"; // on rempli le tableau JS à partir des valeurs de son homologue PHP foreach( $php_array as $key => $value ) { // pouf, on tombe sur une dimension supplementaire if( is_array($value) ) { // On va demander la création d'un tableau JS temporaire $temp = uniqid('temp_'); // on lui choisi un nom bien barbare $t = php2js( $value, $temp ); // et on creer le script JS // En cas d'erreur, remonter l'info aux récursions supérieures if( $t===false ) return false; // Ajout du script de création du tableau JS temporaire $script_js.= $t; // puis on applique ce tableau temporaire à celui en cours de construction $script_js.= "{$js_array_name}['{$key}'] = {$temp};\n"; } // Si la clef est un entier, pas de guillemets elseif( is_int($key) ) $script_js.= "{$js_array_name}[{$key}] = '{$value}';\n"; // sinon avec les guillemets else $script_js.= "{$js_array_name}['{$key}'] = '{$value}';\n"; } // Et retourn le script JS return $script_js; } // fin de la fonction php2js // pour le test, je defini un tableau PHP bien galère... $arr = array('salut'=>'bonjour', 'pouet'=>'truc', 'mutli'=>array('truc'=>'chose', 'bidule'=>'chouette', 'triple'=>array('hop'=>'la', 'you'=>'pi') ), 'piege'=>array(5=>'cinq',6=>'six',7=>'sept') ); ?> <html> <head> <script type="text/javascript"> <!-- // création du tableau JS ici <?php echo php2js($arr,'arr');?> --> </script> </head> <body> <h1>Préparation du test</h1> <pre> ### Le tableau PHP devant etre copie en JS ### <?php print_r($arr);?> ### Le script construisant l'homologue JS du tableau PHP ### <?php echo php2js($arr,'arr');?> </pre> <h1>Le test</h1> <script type="text/javascript"> <!-- // Verification de la bonne création du tableau... document.write("arr['mutli']['triple']['hop'] = "+arr['mutli']['triple']['hop'] + '<br />'); document.write("arr['piege'][5] = "+arr['piege'][5] + '<br />'); document.write("arr['piege'][7] = "+arr['piege'][7] + '<br />'); document.write("arr['piege'][0] = "+arr['piege'][0] + '<br />'); --> </script> </body> </html>

Conclusion :


Voilou, je ne sait pas bien à quoi peut servir ce php2js().

Faites moi tous les commentaires qui vous passent par la tête, mais n'oubliez pas : ce code vous est donnée "brute de décoffrage"

A+

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Bonjour...

Depuis le temps que cette source existe, bien des choses ont changées ! Entres-autres, l'arrivé d'un truc nommé JSON...

Bref, pour passer un tableau PHP en Javascript, simplement faire :

var jsTable = <?php echo json_encode( $phpTable ) ?>;

Au revoir !
http://fr.php.net/json_encode
Messages postés
1
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
10 juillet 2010

Bonjour J_G,
De tout coeur merci pour votre code, je l'apprécie d'autant plus que j'ai bien bavé sur le sujet avant de trouver votre partage. La qualité de ce partage est à la hauteur de sa diffusion, il suffit de faire une recherche (google) sur cette phrase que j'ai envie d'afficher en dessous de la pendule de ma cuisine :
$temp = uniqid('temp_'); // on lui choisi un nom bien barbare
(et en plus plus d'être utile, j'ai bien rigolé)
Bonne continuation à vous :)
Xanedarel
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Merci pour cette erreur trouvee : "gettype($array) -> $array n'existe"

Je ne suis pas en mesure de la corriger... ce sera pour plus tard
Bye
Messages postés
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1
bon, il ya beaucoup de commentaires qui n'ont pas rapport à la source alors je n'ai pas tout lu... et comme j'ai trouvé une petite erreur, et qu'elle n'est pas corrigé, je me dis que personne en a parlé.

gettype($array) -> $array n'existe pas :)
Messages postés
510
Date d'inscription
samedi 29 décembre 2001
Statut
Membre
Dernière intervention
23 mai 2008

Moi j'ai opté pour le brésil, c'est plus chaud ^^
Et puis c'est vrai que la france en ce moment...
Afficher les 40 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.