IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[PHP-JS] Un tableau à 2 dimensions en javascript à partir d'un tableau PHP


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut [PHP-JS] Un tableau à 2 dimensions en javascript à partir d'un tableau PHP
    Bonjour, je me tourne vers vous pour un problème que je rencontre, à mi-chemin entre le PHP et le javascript. Je ne sais donc pas si cette section sera plus adaptée qu'une autre ou pas, désolé d'avance si je me trompe.

    Mon problème est le suivant : utilisant un module jQuery pour construire des diagrammes, je dois récupérer des valeurs contenues en base de données, pour les transformer ensuite en variable javascript de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var data = [[x1,y1],[x2,y2],[x3,y3],...,[xn,yn]];
    J'ai donc un tableau à 2 dimensions dans un tableau.

    Pour cela je pensais construire un tableau en PHP, puis injecter ce tableau dans un tableau javascript. Mais je me perds dans le raisonnement et mes tentatives sont vaines.

    J'ai utilisé le même processus pour des variables construites à partir d'un tableau en 1 dimension, qui fonctionne parfaitement, mais impossible de l'adapter. Voici le code que j'utilisais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php while ($varNtotal = mysql_fetch_array($varStatistique)) {
    	$varVisite[] = $varNtotal['col1'];
    } ?>
     
    <script type="text/javascript">
    var data = new Array(<?php echo implode(',' ,$varVisite); ?>);
    </script>
    Je me retrouve bien avec une variable javascript de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var data = [x1,x2,x3,...,xn];
    Le problème est que si je suis la même logique et que je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php while ($varNtotal = mysql_fetch_array($varCotation_varStatistique)) {
    	$varVisite[] = array($varNtotal['col1'], $varNtotal['col2']);
    } ?>
     
    <script type="text/javascript">
    var data = new Array(<?php echo implode(',', $varHistorique); ?>);
    </script>
    Je me retrouve avec une variable javascript de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var data = [x1,y1,x2,y2,x3,y3,...,xn,yn];
    Une idée ? Merci d'avance.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Merci pour le lien, je n'avais pas trouvé cette information.
    Mais apparemment j'obtiens le même résultat, avec une variable de cette forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var data = [x1,y1,x2,y2,x3,y3,...,xn,yn];
    ...

    EDIT :
    C'est bon, ça fonctionne. J'ai affiché la structure de mon tableau dans javascript à partir du plugin jQuery-JSon, et j'ai vu que les valeurs étaient interprétées comme du texte, et non des chiffres.
    Du coup j'ai retiré les ' dans la fonction de construction du tableau, et le résultat est exactement ce que j'attendais.

    MERCI BEAUCOUP !

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Bonjour, je me retourne vers vous de nouveau pour une amélioration sur ce code.
    Je souhaite construire en gros 30 tableaux de cette façon, donc au lieu d'écrire 30 fois la ligne de construction, j'ai essayé de faire une boucle sur une variable dynamique.
    Je me retrouve avec une erreur de construction du tableau, voici mon code :

    AVANT (fonctionne) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function construisTableauJS($tableauPHP, $nomTableauJS){
    	echo $nomTableauJS." = new Array();";
    	for ($i=0; $i<count($tableauPHP); $i++) {
    		if (!is_array($tableauPHP[$i])) {
    			echo $nomTableauJS."[".$i."] = ".$tableauPHP[$i].";";
    		} else {
    			construisTableauJS($tableauPHP[$i], $nomTableauJS."[".$i."]");
    		}
    	}
    	return;
    }
     
    echo "<script type='text/javascript'>";
    construisTableauJS($varHistorique_EBM1, "varHistorique_EBM1");
    construisTableauJS($varHistorique_EBM2, "varHistorique_EBM2");
    construisTableauJS($varHistorique_EBM3, "varHistorique_EBM3");
    construisTableauJS($varHistorique_EBM4, "varHistorique_EBM4");
    construisTableauJS($varHistorique_EBM5, "varHistorique_EBM5");
    construisTableauJS($varHistorique_EBM6, "varHistorique_EBM6");
    construisTableauJS($varHistorique_EBM7, "varHistorique_EBM7");
    construisTableauJS($varHistorique_EBM8, "varHistorique_EBM8");
    construisTableauJS($varHistorique_EOB1, "varHistorique_EOB1");
    construisTableauJS($varHistorique_EOB2, "varHistorique_EOB2");
    construisTableauJS($varHistorique_EOB3, "varHistorique_EOB3");
    construisTableauJS($varHistorique_EOB4, "varHistorique_EOB4");
    construisTableauJS($varHistorique_EOB5, "varHistorique_EOB5");
    construisTableauJS($varHistorique_EOB6, "varHistorique_EOB6");
    construisTableauJS($varHistorique_EOB7, "varHistorique_EOB7");
    construisTableauJS($varHistorique_EOB8, "varHistorique_EOB8");
    construisTableauJS($varHistorique_EMA1, "varHistorique_EMA1");
    construisTableauJS($varHistorique_EMA2, "varHistorique_EMA2");
    construisTableauJS($varHistorique_EMA3, "varHistorique_EMA3");
    construisTableauJS($varHistorique_EMA4, "varHistorique_EMA4");
    construisTableauJS($varHistorique_EMA5, "varHistorique_EMA5");
    construisTableauJS($varHistorique_EMA6, "varHistorique_EMA6");
    construisTableauJS($varHistorique_EMA7, "varHistorique_EMA7");
    construisTableauJS($varHistorique_EMA7, "varHistorique_EMA8");
    construisTableauJS($varHistorique_ECO1, "varHistorique_ECO1");
    construisTableauJS($varHistorique_ECO2, "varHistorique_ECO2");
    construisTableauJS($varHistorique_ECO3, "varHistorique_ECO3");
    construisTableauJS($varHistorique_ECO4, "varHistorique_ECO4");
    construisTableauJS($varHistorique_ECO5, "varHistorique_ECO5");
    construisTableauJS($varHistorique_ECO6, "varHistorique_ECO6");
    construisTableauJS($varHistorique_ECO6, "varHistorique_ECO7");
    construisTableauJS($varHistorique_ECO6, "varHistorique_ECO8");
    echo "</script> ";
    APRES (ne fonctionne pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function construisTableauJS($tableauPHP, $nomTableauJS){
    	echo $nomTableauJS." = new Array();";
    	for ($i=0; $i<count($tableauPHP); $i++) {
    		if (!is_array($tableauPHP[$i])) {
    			echo $nomTableauJS."[".$i."] = ".$tableauPHP[$i].";";
    		} else {
    			construisTableauJS($tableauPHP[$i], $nomTableauJS."[".$i."]");
    		}
    	}
    	return;
    }
     
    echo "<script type='text/javascript'>";
    $varCotation = array("EBM","EOB","EMA","ECO");
    foreach($varCotation as $cdt) {
    	for ($x=1; $x<=8; $x++) {
    		$varVar1 = "varHistorique_".$cdt.$x;
    		construisTableauJS($$varVar1, $varVar1);
    	}
    }
    echo "</script> ";
    Merci d'avance.

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Hum... bêtement, tu as vérifié qu'un echo de ta variable construite donne bien ce que tu attends ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $varVar1 = "varHistorique_".$cdt.$x;
    echo $varVar1 ;
    Ensuite, si on avait l'erreur exacte ça aiderait sans doute.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Oui la variable construite est bien celle que j'attends.

    L'erreur je la vois dans la console d'erreur en faite. La page arrête de se charger au niveau de ces lignes là, et le module qui construit le diagramme à partir de ces valeurs (voir premier post) me retourne un "varHistorique_EBM1 is not defined", comme si la valeur était vide.

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pour éviter les problèmes, tu peux contrôler l'existence de ta variable avant l'appel de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $varVar1 = "varHistorique_".$cdt.$x;
    if (isset($$varVar1)) {
    	construisTableauJS($$varVar1, $varVar1);
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Bon, apparemment le problème venait du nom de la variable "varVar1", que j'avais déjà utilisé plus haut et qui faisait interférence !! Bizarre.
    Quoi qu'il en soit, ça fonctionne maintenant...
    Merci

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut [PHP-JS] Un tableau à 2 dimensions en javascript à partir d'un tableau PHP en AJAX
    Bonjour,

    Je reviens sur mon post pour une amélioration que je tente d'apporter à mon code. Cette fois, mon tableau PHP est déclaré en AJAX dans une page appelée.
    Il me faut donc envoyer par AJAX le tableau, et l'interpréter dans le javascript.

    Puisque je ne peux pas faire une boucle pour construire le tableau JS, je suppose qu'il faut que j'envoie le tableau PHP "sérialisé" depuis la page AJAX, puis que je le "déserialise" dans javascript. C'est bien ça ?

    EDIT :
    Bon alors voici où j'en suis.
    1. la page qui va interpréter le tableau en javascript et qui appelle l'AJAX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $.post('inc.php',
    	{ culture: num[0], echeance: num[1] },
    	function(data) {
    		var tableau = eval('('+data+')');
    		alert(tableau);				
    	}, 'json'
    );
    Et la page AJAX qui créé le tableau et le retourne sérialisé en JSON :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($varNtotal = mysql_fetch_array($varCotation)) {
    	$varHistorique[] = array($varNtotal['timestamp'], $varNtotal['echeance_2');
    }
    echo json_encode($varHistorique);
    Lorsque je fais un alert basique, je vois bien toute mes valeurs passées, sous la forme x1, x2, x3, x4. Et lorsque je fais l'éval, je n'obtiens que la dernière valeur.

    Où est mon erreur ?

    EDIT 2 :
    Bon j'ai corrigé le tir en comprenant un peu mieux le fonctionnement. J'ai du coup trouvé une fonction de transformation qui m'a donné un résultat satisfaisant.

    1. la page qui va interpréter le tableau en javascript et qui appelle l'AJAX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function array2json(arr) {
    	var parts = [];
    	var is_list = (Object.prototype.toString.apply(arr) === '[object Array]');
    	for(var key in arr) {
    		var value = arr[key];
    		if(typeof value == "object") {
    			if(is_list) parts.push(array2json(value));
    			else parts[key] = array2json(value);
    		} else {
    			var str = "";
    			if(!is_list) str = key + ':';
    			if(typeof value == "number") str += value;
    			else if(value === false) str += 'false';
    			else if(value === true) str += 'true';
    			else str += value;
    			parts.push(str);
    		}
    	}
    	var json = parts.join(",");
    	if(is_list) return '[' + json + ']';
    	return '{' + json + '}';
    }
     
    $.post('inc.php',
    	{ culture: num[0], echeance: num[1] },
    	function(data) {
    		var tableau = array2json(data);				
    	}, 'json'
    );
    2. la page AJAX qui créé le tableau et le retourne sérialisé en JSON :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while ($varNtotal = mysql_fetch_array($varCotation)) {
    	$varHistorique[] = array($varNtotal['timestamp'], $varNtotal['echeance_2']);
    }
     
    echo json_encode($varHistorique);
    Et ça tourne !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/07/2014, 11h21
  2. Recuperer un tableau à deux dimensions PHP sous Javascript
    Par Archalia dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/01/2010, 11h44
  3. Réponses: 2
    Dernier message: 04/03/2008, 09h48
  4. Réponses: 1
    Dernier message: 26/08/2007, 22h21
  5. [Tableaux] Fonction PHP et tableau à 2 dimensions
    Par ponteprimo dans le forum Langage
    Réponses: 3
    Dernier message: 06/09/2006, 14h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo