2016-03-31 9 views
0

Ich habe dieses Array in PHPZugriff auf Eigenschaften multimendional Array PHP von Javascript

<?php 

    $data = array(); 

     $data[0] = array('year' => 2001, 'month' => array(
       'January' => array('val1' => 1000, 'val2' => 2000), 
       'February' => array('val1' => 1000, 'val2' => 2000) 
      ) 
     ); 

     $data[1] = array('year' => 2002, 'month' => array(
       'January' => array('val1' => 3000, 'val2' => 4000), 
       'February' => array('val1' => 6000, 'val2' => 7000) 
      ) 
     ); 

     echo json_encode($data); 
     ?> 

Ich versuche, den Zugang von Javascript zu den Eigenschaften dieses Array von JavaScript, aber ich habe nicht erreicht.

Ich habe versucht, diese

<html> 
    <head> 
     <script type="text/javascript" src="jquery.min.js"></script> 

     <script type="text/javascript"> 
      $(document).ready(function() { 
       $.ajax({ 
        url: 'ajax1.php', 
        type: 'GET', 
        dataType: 'json' 
       }).done(function (data) { 
        var i = 0; 
        for (i in data) { 

         $('#year').append('<b>'+data[i].year+'</b>'+':<br/>'); 
         var x=0; 
         for(x in data[i].month){ 
          $('#year').append(data[i].month[x] +'<br/>'); 
          x++; 
         } 
         i++; 

        } 
       }); 
      }); 
     </script> 
     <title>Graphs</title> 
    </head> 

    <body> 
     <div id="year"> 

     </div> 
    </body> 
</html> 

ich den Zugang zum Jahr, bekommen aber nicht die anderen Eigenschaften.

Druckt die folgenden:

2001: 
[object Object] 
[object Object] 
2002: 
[object Object] 
[object Object] 

Antwort

0

da jeden Monat ein Array ist - nicht Sie benötigen eine zusätzliche Schleife die Werte innerhalb dieser Monate Array zu erhalten. das Ergebnis davon wäre:

$('#year').append(data[i].month[x][0] //= val1 within month[x] 
$('#year').append(data[i].month[x][1] //= val2 within month[x] 

so würden Sie drei verschachtelte Schleifen benötigen:

//pseudo code including a new loop "z" 
[i] to get the year; 
[x] to get each month within year[i]; 
[z] to get each value within month[x]; 
+0

als 'Daten [i] .month [x]' ein Objekt ist, sollte der Zugang, den Namen der Eigenschaft 'Daten [i] .month [x] .val1' oder' Daten [i ] .month [x] ["val1"] 'anstatt dem Index – Omar

+0

danke Omar - ich lerne immer noch. aber die Prämisse meiner Post ist richtig? dass auf val1 und val2 nicht zugegriffen wird, da es sich um verschachtelte Werte im übergeordneten Array "month" handelt. – gavgrif

+0

ja @ gavgrif, das ist richtig :) – Omar

0

Nach dekodieren ein JSON, mit PHP json_encode erstellt, nicht numerische Arrays werden in JavaScript-Objekte umgewandelt. Wenn Sie ein Array benötigen, versuchen Sie es mit numerischen Schlüsselwörtern.

Einige Browser wie Chrom, alphabetisch sortieren das Objekt keywors. Wenn Sie das Objekt iterieren möchten, müssen Sie dies vorher wissen.

Ein Vorschlag: Verwenden Sie $ .each i jQuery, um Arrays oder Objekte zu iterieren ist einfacher.

$.each(data, function(key, value){ 
... 
}); 
Verwandte Themen