我正在尝试从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
}
答案 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>
答案 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]);
}
}