从PHP中回显的json编码数组中迭代javascript对象

时间:2015-01-14 00:51:26

标签: javascript php arrays json

我正在尝试从Javascript中的PHP数组中获取值并填充图表。

问题是我认为javascript变量没有收到值。

我尝试打印出值,但没有任何反应。它也显示为对象而不是数组,我不知道它是否像那样。

任何帮助都会很棒。

打印出来的PHP数组:

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      
}

4 个答案:

答案 0 :(得分:1)

您的问题是JS Array没有关联索引,因此您的PHP数组变成了JS对象。您可以尝试重写PHP数组:

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

然后你可以在json_encode之后对JS进行迭代。

答案 1 :(得分: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

答案 2 :(得分:1)

变量是一个对象(因为PHP中的数组有字符串键),您可以使用Object.keys()进行迭代:

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

请注意,JavaScript中的对象属性不按定义排序,因此如果这很重要,则应考虑在PHP中创建数字索引数组。

答案 3 :(得分: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]);
    }
}