Partage
  • Partager sur Facebook
  • Partager sur Twitter

Création de tableau

variable inexistante

Sujet résolu
    12 février 2011 à 12:48:06

    Bonjour à tous,

    je suis en train d'essayer de convertir un tableau php en tableau js mais il me met une erreur que je ne comprend pas. Je cherche depuis hier et pas moyen de trouver mon erreur. Le code js pour créer l'array me semble correct et pourtant il l'est pas :euh: Je mets toujours le code php, on sait jamais que l'erreur vienne de là mais la raison de l'erreur dans le js devrait me suffire pour corriger le php ;)

    Le php:
    <?php
    function array2js($phpArray,$jsName)
    {
    	$output = '
    	var '.$jsName.' = new Array();
    	';
    	foreach($phpArray AS $k=>$v)
    	{
    		//treat key
    		if(is_string($k))
    			$k = '"'.$k.'"';
    		
    		if( is_array($v) ) $output .= array2js($v,$jsName.'['.$k.']');
    		else
    		{
    			//treat value
    			if(is_bool($v))
    			{
    				if($v) $v = 'true';
    				else $v = 'false';
    			}
    			elseif(is_string($v))
    				$v = '"'.$v.'"';
    			elseif(is_int($v) || is_float($v))
    				$v = $v;
    			else
    				$v = '"This value was a php object or ressource(not treated)"';
    			
    			//output
    			$output .= $jsName.'['.$k.'] = '.$v.';
    	';
    		}
    	}
    	return $output;
    } 
    ?>
    <?php
    echo '<html>
    	<head>
    		';
    
    $array = array(
    	'trolls'=>array(
    		0=>array(
    			'ID'=>'9948577',
    			'nom'=>'moi'
    		),
    		1=>array(
    			'ID'=>'9948578',
    			'nom'=>'moi2'
    		)
    	),
    	'montsre'=>array(
    		0=>array(
    			'ID'=>'994857773',
    			'N'=>'-34'
    		),
    		0=>array(
    			'ID'=>'994857774',
    			'N'=>'-34'
    		),
    		0=>array(
    			'ID'=>'994857775',
    			'N'=>'-34'
    		)
    	),
    	34,
    	'RuTubes'
    );
    
    echo '<script type="text/javascript">'.array2js($array,'testArray').'</script>
    	';
    
    echo '</head>
    	<body>
    	</body>
    </html>';
    ?>
    


    Le javascript généré:
    var testArray = new Array();
    	
    	//var testArray["trolls"] = new Array();
    	
    	var testArray["trolls"][0] = new Array();
    	testArray["trolls"][0]["ID"] = "9948577";
    	testArray["trolls"][0]["nom"] = "moi";
    	
    	var testArray["trolls"][1] = new Array();
    	testArray["trolls"][1]["ID"] = "9948578";
    	testArray["trolls"][1]["nom"] = "moi2";
    	
    	var testArray["montsre"] = new Array();
    	
    	var testArray["montsre"][0] = new Array();
    	testArray["montsre"][0]["ID"] = "994857775";
    	testArray["montsre"][0]["N"] = "-34";
    	testArray[0] = 34;
    	testArray[1] = "RuTubes";
    


    L'erreur(ligne en commentaire dans le code javascript):
    Erreur : missing ; before statement
    Fichier Source : http://localhost/bench/
    Ligne : 6, Colonne : 5
    Code Source :
    var testArray["trolls"] = new Array();


    Merci à ceux qui trouverons ou essayerons de trouver.
    • Partager sur Facebook
    • Partager sur Twitter

    M@t

      12 février 2011 à 12:59:53

      Les quatres derniers var sont inutiles.

      Ton premier tableau étant créé, tu n'a plus de variables à déclarer. ;)
      • Partager sur Facebook
      • Partager sur Twitter
        12 février 2011 à 13:04:06

        Comme ça?
        var testArray = new Array();
        	testArray["trolls"] = new Array();
        	testArray["trolls"][0] = new Array();
        	testArray["trolls"][0]["ID"] = "9948577";
        	testArray["trolls"][0]["nom"] = "moi";
        	testArray["trolls"][1] = new Array();
        	testArray["trolls"][1]["ID"] = "9948578";
        	testArray["trolls"][1]["nom"] = "moi2";
        	testArray["montsre"] = new Array();
        	testArray["montsre"][0] = new Array();
        	testArray["montsre"][0]["ID"] = "994857775";
        	testArray["montsre"][0]["N"] = "-34";
        	testArray[0] = 34;
        	testArray[1] = "RuTubes";
        

        Plus d'erreur en tout cas, et je sais accéder à mon tableau. Merci beaucoup :D

        Pour ceux qui veulent le php, j'ai corrigé la fonction comme ceci:
        <?php
        function array2js($phpArray,$jsName,$i=0)
        {
        	if($i==0)
        		$output = 'var '.$jsName.' = new Array();
        	';
        	else
        		$output = ''.$jsName.' = new Array();
        	';
        	foreach($phpArray AS $k=>$v)
        	{
        		//treat key
        		if(is_string($k))
        			$k = '"'.$k.'"';
        		
        		if( is_array($v) ) $output .= array2js($v,$jsName.'['.$k.']',1);
        		else
        		{
        			//treat value
        			if(is_bool($v))
        			{
        				if($v) $v = 'true';
        				else $v = 'false';
        			}
        			elseif(is_string($v))
        				$v = '"'.$v.'"';
        			elseif(is_int($v) || is_float($v))
        				$v = $v;
        			else
        				$v = '"This value was a php object or ressource(not treated)"';
        			
        			//output
        			$output .= $jsName.'['.$k.'] = '.$v.';
        	';
        		}
        	}
        	return $output;
        } 
        ?>
        


        Edit: ca marche plus en fait :-°

        J'utilise cette fonction sur un tableau bien plus grand cette fois donc je le copierai pas mais il me dit que ma variable est pas définie quand j'essaye de l'afficher o_O

        <?php
        echo '<html>
        	<head>
        		<script type="text/javascript">
        			'.array2js($vue,'vueJavascript').'
        		</script>
        	</head>
        	<body>
        		<script type="text/javascript">
        			document.write(vueJavascript["32|39"]["trolls"][0]["nom"]);
        		</script>
        	</body>
        </html>';
        ?>
        

        Pourtant dans le code source, j'ai ceci: var vueJavascript = new Array(); vueJavascript["32|39"]["trolls"][0]["nom"] = "Karamel";

        Mais vueJavascript est pas définie d'après firefox :euh:
        Erreur : vueJavascript is not defined
        Fichier Source : http://localhost/projects/websites/bas [...] eatMhView.php
        Ligne : 110397
        • Partager sur Facebook
        • Partager sur Twitter

        M@t

          12 février 2011 à 14:18:35

          Donne tout le code généré.

          Quitte à le mettre sur pastebin si ça fait trop pour le SdZ.
          • Partager sur Facebook
          • Partager sur Twitter
            12 février 2011 à 16:06:23

            Ligne 7200, tu as ça :

            vue["-36|-16"]["trolls"][0]["nom"] = ""Chewing-Goule"";
            


            Si le mot doit être rendu entouré de guillemets, il faut les échapper !

            vue["-36|-16"]["trolls"][0]["nom"] = "\"Chewing-Goule\"";
            





            Soit dit en passant. Il faudrait que tu apportes des modifications à plusieurs endroits de ton code, afin de faire la différence entre un Object et un Array.

            Les Object sont des tableaux associatifs (qui associent à une clé (=un texte) une valeur (=un autre texte)).
            Les Array, en revanche, associent une clé numérique à une valeur.

            Donc écrire ceci est faux :
            var machin = new Array();
            machin["truc"] = "bidule";
            


            Il faut écrire :
            var machin = new Object();
            machin["truc"] = "bidule";
            


            Genre si on prend la première vue, ça donne ça :
            var vue = new Object();
            vue["32|39"] = new Object();
            vue["32|39"]["trolls"] = new Array();
            vue["32|39"]["trolls"][0] = new Object();
            vue["32|39"]["trolls"][0]["ID"] = "4";
            vue["32|39"]["trolls"][0]["nom"] = "Karamel";
            vue["32|39"]["trolls"][0]["type"] = "Skrim";
            vue["32|39"]["trolls"][0]["lv"] = "54";
            vue["32|39"]["trolls"][0]["N"] = "-10";
            vue["32|39"]["monstres"] = new Array();
            vue["32|39"]["monstres"][0] = new Object();
            vue["32|39"]["monstres"][0]["ID"] = "3154324";
            vue["32|39"]["monstres"][0]["nom"] = "Familier [Nouveau]";
            vue["32|39"]["monstres"][0]["N"] = "-10";
            vue["32|39"]["monstres"][1] = new Object();
            vue["32|39"]["monstres"][1]["ID"] = "3130964";
            vue["32|39"]["monstres"][1]["nom"] = "Scorpion Géant [Immature]";
            vue["32|39"]["monstres"][1]["N"] = "-18";
            vue["32|39"]["tresors"] = new Array();
            vue["32|39"]["tresors"][0] = new Object();
            vue["32|39"]["tresors"][0]["ID"] = "8426618";
            vue["32|39"]["tresors"][0]["nom"] = "Armure";
            vue["32|39"]["tresors"][0]["N"] = "-10";
            vue["32|39"]["tresors"][1] = new Object();
            vue["32|39"]["tresors"][1]["ID"] = "8401145";
            vue["32|39"]["tresors"][1]["nom"] = "Arme (1 main)";
            vue["32|39"]["tresors"][1]["N"] = "-24";
            vue["32|39"]["tresors"][2] = new Object();
            vue["32|39"]["tresors"][2]["ID"] = "8419228";
            vue["32|39"]["tresors"][2]["nom"] = "Casque";
            vue["32|39"]["tresors"][2]["N"] = "-10";
            vue["32|39"]["tresors"][3] = new Object();
            vue["32|39"]["tresors"][3]["ID"] = "6951355";
            vue["32|39"]["tresors"][3]["nom"] = "Armure";
            vue["32|39"]["tresors"][3]["N"] = "-12";
            vue["32|39"]["tresors"][4] = new Object();
            vue["32|39"]["tresors"][4]["ID"] = "3192826";
            vue["32|39"]["tresors"][4]["nom"] = "Bidouille";
            vue["32|39"]["tresors"][4]["N"] = "-29";
            vue["32|39"]["tresors"][5] = new Object();
            vue["32|39"]["tresors"][5]["ID"] = "6346516";
            vue["32|39"]["tresors"][5]["nom"] = "Bottes";
            vue["32|39"]["tresors"][5]["N"] = "-29";
            vue["32|39"]["tresors"][6] = new Object();
            vue["32|39"]["tresors"][6]["ID"] = "7909112";
            vue["32|39"]["tresors"][6]["nom"] = "Spécial";
            vue["32|39"]["tresors"][6]["N"] = "-29";
            vue["32|39"]["tresors"][7] = new Object();
            vue["32|39"]["tresors"][7]["ID"] = "6996347";
            vue["32|39"]["tresors"][7]["nom"] = "Armure";
            vue["32|39"]["tresors"][7]["N"] = "-29";
            vue["32|39"]["tresors"][8] = new Object();
            vue["32|39"]["tresors"][8]["ID"] = "7875611";
            vue["32|39"]["tresors"][8]["nom"] = "Armure";
            vue["32|39"]["tresors"][8]["N"] = "-4";
            vue["32|39"]["tresors"][9] = new Object();
            vue["32|39"]["tresors"][9]["ID"] = "7880214";
            vue["32|39"]["tresors"][9]["nom"] = "Bouclier";
            vue["32|39"]["tresors"][9]["N"] = "-6";
            vue["32|39"]["tresors"][10] = new Object();
            vue["32|39"]["tresors"][10]["ID"] = "6332600";
            vue["32|39"]["tresors"][10]["nom"] = "Armure";
            vue["32|39"]["tresors"][10]["N"] = "-29";
            vue["32|39"]["tresors"][11] = new Object();
            vue["32|39"]["tresors"][11]["ID"] = "8433897";
            vue["32|39"]["tresors"][11]["nom"] = "Arme (2 mains)";
            vue["32|39"]["tresors"][11]["N"] = "-10";
            vue["32|39"]["tresors"][12] = new Object();
            vue["32|39"]["tresors"][12]["ID"] = "8422447";
            vue["32|39"]["tresors"][12]["nom"] = "Armure";
            vue["32|39"]["tresors"][12]["N"] = "-10";
            vue["32|39"]["tresors"][13] = new Object();
            vue["32|39"]["tresors"][13]["ID"] = "8416994";
            vue["32|39"]["tresors"][13]["nom"] = "Armure";
            vue["32|39"]["tresors"][13]["N"] = "-10";
            vue["32|39"]["tresors"][14] = new Object();
            vue["32|39"]["tresors"][14]["ID"] = "8423258";
            vue["32|39"]["tresors"][14]["nom"] = "Bottes";
            vue["32|39"]["tresors"][14]["N"] = "-10";
            vue["32|39"]["tresors"][15] = new Object();
            vue["32|39"]["tresors"][15]["ID"] = "8425635";
            vue["32|39"]["tresors"][15]["nom"] = "Potion";
            vue["32|39"]["tresors"][15]["N"] = "-10";
            vue["32|39"]["tresors"][16] = new Object();
            vue["32|39"]["tresors"][16]["ID"] = "8424805";
            vue["32|39"]["tresors"][16]["nom"] = "Bouclier";
            vue["32|39"]["tresors"][16]["N"] = "-10";
            



            Aussi, tu serais peut-être intéressé d'apprendre qu'il existe des notations littérales pour les Objet et les Array.

            var o = new Object();
            o["machin"] = "bidule";
            o["truc"] = "chose";
            
            // peut aussi s'écrire
            var o = {
                "machin" : "bidule",
                "true" : "chose"
            };
            
            
            var a = new Array();
            a[0] = "machin";
            a[1] = "truc";
            
            // peut aussi s'écrire :
            var a = [
                "machin",
                "truc"
            ];
            


            Tu gagnes considérablement en caractères.
            Exemple avec la première vue :
            var vue = {
            	"32|39" : {
            		"trolls" : [
            			{
            				"ID" : "4",
            				"nom" : "Karamel",
            				"type" : "Skrim",
            				"lv" : "54",
            				"N" : "-10"
            			}
            		],
            		"monstres" : [
            			{
            				"ID" : "3154324",
            				"nom" : "Familier [Nouveau]",
            				"N" : "-10"
            			},{
            				"ID" : "3130964",
            				"nom" : "Scorpion Géant [Immature]",
            				"N" : "-18"
            			}
            		],
            		"tresors" : [
            			{
            				"ID" : "8426618",
            				"nom" : "Armure",
            				"N" : "-10"
            			},{
            				"ID" : "8401145",
            				"nom" : "Arme (1 main)",
            				"N" : "-24"
            			},{
            				"ID" : "8419228",
            				"nom" : "Casque",
            				"N" : "-10"
            			},{
            				"ID" : "6951355",
            				"nom" : "Armure",
            				"N" : "-12"
            			},{
            				"ID" : "3192826",
            				"nom" : "Bidouille",
            				"N" : "-29"
            			}/*,{
            				...
            			}*/
            		]
            	}
            };
            


            (La flemme de finir. :-° )
            • Partager sur Facebook
            • Partager sur Twitter
              12 février 2011 à 16:32:22

              Ah...donc un array associatif en javascript est en fait un objet et non un array?

              Bon ben vais modifier mon code et je reviens :D

              En passant, une idée pour changer les " en \"? Je pensais à faire avec un preg_replace dans ma fct php mais peut-être qu'il y à plus rapide...

              Edit1: ça marche :D Merci d'avoir pointé ce problème de guillemets. Je vais me pencher sur cette histoire de différence objet/array maintenant...ça va pas être simple ^^
              • Partager sur Facebook
              • Partager sur Twitter

              M@t

                12 février 2011 à 16:39:37

                Oui, c'est tout à fait ça.
                C'est une nuance qui n'existe pas réellement en PHP. D'où cette confusion très répandue.

                Pour échapper les quotes... http://php.net/manual/en/function.addslashes.php ?
                • Partager sur Facebook
                • Partager sur Twitter
                  12 février 2011 à 16:50:50

                  Vais éviter addslashes, je dois juste échapper les " pour que ça me ferme pas mes chaines de caractères. Sinon les autres symboles apparaîtraient avec un \ devant et ça je veux pas. Ca me ferait du boulot en plus pour les retirer en js après ^^

                  Oublies, j'ai rien dit ^^ Je viens de tester avec d'autres caractères et ça va bien en fait ^^
                  • Partager sur Facebook
                  • Partager sur Twitter

                  M@t

                    12 février 2011 à 17:03:43

                    Pense à mettre ton sujet en résolu à l'aide du bouton approprié ;)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 février 2011 à 17:12:30

                      Honte à moi qui oublie ma propre signature ^^

                      Merci beaucoup en tout cas :)
                      • Partager sur Facebook
                      • Partager sur Twitter

                      M@t

                      Création de tableau

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown