2016-03-31 3 views
0

У меня есть этот массив в PHPДоступ свойства multimendional PHP массив из 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); 
     ?> 

Я пытаюсь получить доступ из JavaScript к свойствам этого массива из JavaScript, но я не достиг.

Я попытался это

<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> 

я получаю доступ к в году, но не другие свойства.

Печатает следующее:

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

ответ

0

, поскольку каждый месяц массив - не будет вам нужен дополнительный цикл, чтобы получить значение в течение этого месяца массива. исход которого будет:

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

поэтому вам потребуется три вложенных цикла:

//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

как 'данные [I] .month [х]' является объектом, доступ должен использовать имя данных свойств '[I] .month [х] .val1' или' данные [I ] .month [x] ["val1"] ', а не индекс – Omar

+0

спасибо Омар. Я все еще учился. но предпосылка моего поста правильная? что val1 и val2 не доступны, поскольку они являются вложенными значениями в родительском массиве «месяц». – gavgrif

+0

да @gavgrif, это правильно :) – Omar

0

После декодирования JSON, созданный с PHP json_encode, нечисловой массивы преобразуются в JavaScript-объектов. Если вам нужен массив, попробуйте с числовыми ключевыми словами.

Некоторые браузеры, такие как хром, сортируют по алфавиту с ключом. Если вы думаете, что итерации объекта, вы должны знать это раньше.

Предложение: используйте $ .each i jQuery для итерации массивов или объектов проще.

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