Conversion d'un tableau php en déclaration de tableau javascript

Soyez le premier à donner votre avis sur cette source.

Snippet vu 28 519 fois - Téléchargée 29 fois

Contenu du snippet

C'est une fonction PHP qui au moment où elle est appellée fournit le code javascript correspondant au tableau php passé en paramètre.

conv_tabjs($tableau, $nomjs);

$tableau est le tableau php à convertir
$nomjs est une chaine de caractère contenant le nom de la variable javascript ciblée

Source / Exemple :


// Convertit un tableau PHP en déclaration d'un tableau javascript
// $tableau : variable tableau PHP à convertir
// $monjs : nom de la variable tableau en javascript
// $prempass : /!\ NE PAS UTILISER : sert à différentier le premier passage
// des passages récursifs, je n'ai pas déclaré une seconde fonction pour des
// raisons de portabilité...
//
// Utilisation commune : conv_tabjs($tableau, "nomJS");
//

function conv_tabjs($tableau, $nomjs, $prempass=true) {

	if($prempass) {
		$taille = count($tableau);
	
		echo "var ".$nomjs." = new Array(".$taille.");\n";
		foreach($tableau as $key => $val) {
			if(is_string($key)) $key = "'".$key."'";
			conv_tabjs($val, $nomjs."[".$key."]", false);
		}
	}
	else {
		if(is_array($tableau)) {
			echo($nomjs." = new Array(".count($tableau).");\n");
			foreach($tableau as $key => $val) {
				if(is_string($key)) $key = "'".$key."'";
				conv_tabjs($val, $nomjs."[".$key."]", false);
			}
		}
		else {
			if(is_string($tableau)) $tableau = "'".addcslashes($tableau,"'")."'";
			echo($nomjs." = ".$tableau.";\n");
		}
	}
}

Conclusion :

      • Attention : cette fonction écrit dans le document, et elle doit absolument être interprêtée entre des balises <script language="javascript"></script>

(ne pas oublier les balises PHP qd même lol : y en a qui ont essayé y ont eu des problèmes :-D ).

Elle fonctionne avec tous les types de tableau php, et déclare un tableau javascript qui en est l'exact clone.

J'espère vous avoir été utile, @+

10/06/2004 >> bug corrigé : la fonction convertissais toutes les valeurs numériques en chaines de caractères, dorénavant elle respecte le type autant pour la valeur que pour sa clé...

A voir également

Ajouter un commentaire Commentaires
psylo6b Messages postés 2 Date d'inscription jeudi 21 juin 2007 Statut Membre Dernière intervention 28 novembre 2007
28 nov. 2007 à 17:20
veuillez ne pas tenir compte de mon dernier message, il était destiné à un autre script (celui qui affiche mes images entre autre).

On ne peut pas éditer, donc j'en rajoute une couche :p

Merci tout de même à l'auteur de ce script
psylo6b Messages postés 2 Date d'inscription jeudi 21 juin 2007 Statut Membre Dernière intervention 28 novembre 2007
28 nov. 2007 à 14:18
Bonjour,

je souhaiterai utiliser ce script mais j'ai besoin que les adresses des images proviennent de ma base de données mysql.

Je galère à passer mon tableau PHP vers JS, si quelqu'un pouvait me filer un coup de main je lui en serait très reconnaissant, ça fait plusieurs heures que je passe sur le problème et sans grand succès. :-/

Félicitation à l'auteur de ce script tout de même qui a du en dépanner pas mal :)
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
16 juin 2007 à 12:46
Un petit défaut de cette fonction c'est qu'elle écrit le tableau javascript au moment où elle est appelée, au lieu de renvoyer une valeur qui peut stockée dans une variable.

Donc la modif qui s'impose :

function conv_tabjs($tableau, $nomjs, $ret '', $prempass true) {

global $ret;

if($prempass) {
$taille = count($tableau);

$ret 'var '.$nomjs.' new Array('.$taille.");\n";
foreach($tableau as $key => $val) {
if(is_string($key)) { $key = '\''.$key.'\''; }
conv_tabjs($val, $nomjs.'['.$key.']', $ret, false);
}
return $ret;
}
else {
if(is_array($tableau)) {
$ret .$nomjs.' new Array('.count($tableau).");\n";
foreach($tableau as $key => $val) {
if(is_string($key)){ $key = '\''.$key.'\''; }
conv_tabjs($val, $nomjs.'['.$key.']', $ret, false);
}
}
else {
if(is_string($tableau)) { $tableau = '\''.addcslashes($tableau,'\'').'\''; }
$ret .$nomjs.' '.$tableau.";\n";
}
}
}

Ainsi on peut écrire :

$tableaujavascript = conv_tabjs($tableauphp, 'montableau')
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
4 août 2006 à 00:55
Vraiment nickel, même avec des tableaux compliqués... bravo
juniorberry Messages postés 2 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 1 juin 2006
1 juin 2006 à 10:51
Merci Rivenbis !! cette source est si je puis me permettre niquel chrome !

Utilisation simple et code compréhensible !

Pour ceux qui ont un peu de mal malgrès toutes les explications voici ma façon de l'utiliser.

<?php

function conv_tabjs($tabPhp, $nomjs, $prempass=true){...}

//une petite boucle pour incrementer un tableau php
$i=0;
while ($tab=mysql_fetch_array($req)){ //où $req est un select quelconque
$tabphp[$i] = $tab["id"]; //par exemple
$i++;
}
?>

<script language="javascript">
<?php
conv_tabjs($tabphp,"id")//où id est le nom de mon tableau javascript
?>
//version je vérifie le premier enregistrement
alert(id[0]);
//version je boucle pour tout vérifier
for (i=0;i<<?php echo $i;?>;i++){
document.write (id[i]);
}
</script>

Voilà j'espère que cette explication aidera en plus des autres 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.