2015-01-14 3 views
2

Я пытаюсь получить значения из массива PHP в Javascript и заполнить диаграмму.Iterate javascript object from echoed json закодированный массив из PHP

Проблема в том, что я считаю, что переменная javascript не принимает значения.

Я попытался распечатать значения, но ничего не происходит. Также он показывает как объект вместо массива, я не знаю, должно ли оно быть таким.

Любая помощь будет полезна.

РНР массив, когда распечатаны:

print_r("<pre>"); 
print_r($exam_grades); 
print_r("</pre>"); 

Array 
(
    [History] => 70 
    [Sociology] => 40 
    [Psychology] => 32 
    [Criminology] => 64 
) 

JS:

var exam_grades = <?php echo json_encode($exam_grades);?>; 
alert(exam_grades.length); // this shows as undefined 
for (var i = 0; i < exam_grades.length; i++) { 

    // do something  
} 
+0

попробовать Var exam_grades = JSON.parse (); – imnancysun

+0

'console.log()' ваш друг – castis

+0

@imnancysun благодарит за ваш быстрый ответ, но он не работает. предупреждение даже не всплывает :( – sunrisepoet

ответ

1

В качестве альтернативы, вы можете также использовать for in для итерации через объект:

<?php $exam_grades = array('History' => 70, 'Sociology' => 40, 'Psychology' => 32, 'Criminology' => 64); ?> 
<script type="text/javascript"> 
var exam_grades = <?php echo json_encode($exam_grades); ?>; 
for(var key in exam_grades) { 
    var value = exam_grades[key]; 
    console.log(key + ': ' + value); 
} 
</script> 

Sample Output

+0

спасибо. Я отметил это как правильный ответ, потому что был самый прямой. – sunrisepoet

+0

@sunrisepoet уверен, что мне это понравилось – Ghost

1

Ваша проблема заключается в том, что массив JS не ассоциативные индексы, поэтому ваш PHP массив превращается в объект JS. Вы могли бы попытаться переписать PHP массив так:

$grades = [ 
    ['exam' => 'History', 'grade' => 70], 
    ['exam' => 'Sociology', 'grade' => 40], 
    ['exam' => 'Psychology', 'grade' => 32], 
    ['exam' => 'Criminology', 'grade' => 64] 
]; 

Затем вы можете перебирать штраф на JS, после json_encode.

1

переменная является объектом (поскольку массив в PHP есть строковые ключи), которые вы можете перебрать с помощью Object.keys():

Object.keys(exam_grades).forEach(function(key) { 
    console.log(key + ': ' + exam_grades[key]); 
}); 

Обратите внимание, что свойства объекта в JavaScript не упорядочены по definit ion, поэтому, если это важно, вам следует подумать о создании массива с числовой индексацией в PHP.

1

Атрибутный массив php будет json закодирован в объект javascript, потому что javascript не имеет истинных ассоциативных массивов, как это делает php. length не определено, поскольку объекты javascript не имеют собственного свойства длины. Для того, чтобы петли через объект, который вы можете сделать:

for (var key in exam_grades) 
{ if (exam_grades.hasOwnProperty(key)) { 
    console.log(key + " -> " + exam_grades[key]); 
    } 
} 
+1

спасибо. Я голосовал из-за ясного объяснения. – sunrisepoet