从PHP中的回显json编码数组迭代javascript对象
我试图从Javascript中的PHP数组中获取值并填充图表 问题是我认为javascript变量没有收到值 我试着打印出这些值,但什么也没发生。它也显示为对象而不是数组,我不知道它是否应该是这样 任何帮助都将是巨大的 打印时的PHP数组:从PHP中的回显json编码数组迭代javascript对象,javascript,php,arrays,json,Javascript,Php,Arrays,Json,我试图从Javascript中的PHP数组中获取值并填充图表 问题是我认为javascript变量没有收到值 我试着打印出这些值,但什么也没发生。它也显示为对象而不是数组,我不知道它是否应该是这样 任何帮助都将是巨大的 打印时的PHP数组: print_r("<pre>"); print_r($exam_grades); print_r("</pre>"); Array ( [History] => 70 [Sociology] => 40
print_r("<pre>");
print_r($exam_grades);
print_r("</pre>");
Array
(
[History] => 70
[Sociology] => 40
[Psychology] => 32
[Criminology] => 64
)
JS:
您的问题是JS数组没有关联索引,因此PHP数组会变成JS对象。您可以尝试如下方式重写PHP数组:
<?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>
然后,在json_编码之后,您可以在JS上进行精细迭代。作为替代方案,您还可以使用来迭代对象:
Object.keys(exam_grades).forEach(function(key) {
console.log(key + ': ' + exam_grades[key]);
});
该变量是一个对象,因为PHP中的数组具有字符串键,您可以使用以下方法对其进行迭代:
注意,JavaScript中的对象属性不是按定义排序的,因此如果这是重要的,则应该考虑在PHP中创建一个数字索引数组。
< P>一个PHP关联数组将JSON编码成JavaScript对象,因为JavaScript没有PHP那样的真正关联数组。长度未定义,因为javascript对象没有本机长度属性。要循环通过对象,可以执行以下操作:尝试var-exam\u grades=JSON.parse;console.log是您的friend@imnancysun谢谢你的快速回复,但它不起作用。警报甚至不会弹出:不,不。PHP关联数组是js对象。Javascript没有关联数组的概念。PHP中称为数组的结构更接近Javascript中称为对象的结构,而不是更具体的数组特例Object。谢谢。我把这个标记为正确答案,因为这是最直截了当的回答。当然,我很高兴这有助于汉克斯。由于解释清楚,我投了赞成票。
<?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>
Object.keys(exam_grades).forEach(function(key) {
console.log(key + ': ' + exam_grades[key]);
});
for (var key in exam_grades)
{ if (exam_grades.hasOwnProperty(key)) {
console.log(key + " -> " + exam_grades[key]);
}
}