php多维数组到javascript无法通过循环访问

时间:2017-11-18 23:15:20

标签: javascript php arrays json multidimensional-array

我试图将php中的多维数组(在真实场景中动态插入的值)传递给javascript,然后在javascript中使用这些值,当我尝试打印相同的使用循环时,值不会被打印,当我检查了数组[0] .length时,显示 undefined

与静态索引一起使用时打印的值。 PFB图片供参考 - enter image description here

任何人都可以在我错误的地方纠正我,我一直在努力解决这个问题很长时间,无法让它发挥作用。任何帮助表示赞赏。感谢。

<?php
// PHP array
$myArray = array();
$myArray[] = array("id" => 1, "data" => 45);
$myArray[] = array("id" => 3, "data" => 54);
$myArray[] = array("id" => 2, "data" => 69);

$json = json_encode($myArray);
echo $json;
?>


<script type='text/javascript'>
// pass PHP array to JavaScript 
var books = <?php echo json_encode($myArray, JSON_PRETTY_PRINT) ?>;


// how to access 
for (var i=0;i<books.length;i++){
    for (var j=0;j<Object.keys(books[i]).length;j++){
       document.write("In Loop: "+books[i][j]);
    }
} 

console.log("Books length: "+books.length+"\n");
console.log("Books[0] length: "+books[0].length+"\n");

console.log("Out Loop: "+books[0]["id"]+"\n");
console.log("Out Loop: "+books[0]["data"]+"\n");
console.log("Out Loop: "+books[1]["id"]+"\n");
console.log("Out Loop: "+books[1]["data"]+"\n");
console.log("Out Loop: "+books[2]["id"]+"\n");
console.log("Out Loop: "+books[2]["data"]+"\n");
</script>

1 个答案:

答案 0 :(得分:2)

在您的示例中,books[i]是一个对象。它具有属性iddata

但循环中的j是一个整数,因为示例books[0][0]未定义,因为该对象没有名为"0"的属性。

如果要循环遍历每个books[i]对象的属性,可以使用简单的for in循环:

&#13;
&#13;
var books =[
 {id:1, data:45},
 {id:3, data:54},
 {id:2, data:69}
];


// how to access 
for (var i=0;i<books.length;i++){
    for (var prop in books[i]){
       document.write("In Loop: " + prop + '=' + books[i][prop] +'<br>');
    }
} 
&#13;
&#13;
&#13;