Доступ к свойствам мультимендиального массива PHP из JavaScript

У меня есть этот массив в PHP

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

Решение

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

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

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

$.each(data, function(key, value){
...
});
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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector