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

从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

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

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

我试着打印出这些值,但什么也没发生。它也显示为对象而不是数组,我不知道它是否应该是这样

任何帮助都将是巨大的

打印时的PHP数组:

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]);
    }
}