1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| <?php
/*
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'errur :
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> |
Partager