【问题标题】:php multi dimensional array to javascript not accesible through loopphp多维数组到javascript无法通过循环访问
【发布时间】:2017-11-18 23:15:19
【问题描述】:

我正在尝试将一个多维数组从 php(在实际场景中动态插入的值)传递给 javascript,然后这些值在 javascript 内部使用,当我尝试使用循环打印相同的值时,这些值没有被打印,当我检查了 array[0].length 它显示 undefined

与静态索引一起使用时打印的值。 PFB 图像供参考 -

谁能纠正我的错误在哪里,我一直在努力解决这个问题,但无法让它发挥作用。任何帮助表示赞赏。谢谢。

<?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>

【问题讨论】:

  • JS 对象没有长度属性。使用它来获取对象的长度:Object.keys(books[0]).length
  • 嗨 Josan,感谢您的回复,我虽然工作正常,但大小和值再次打印为“未定义”

标签: javascript php arrays json multidimensional-array


【解决方案1】:

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

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

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

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

【讨论】:

  • 您好,如果我想在第一次迭代中使用 1、45 怎么办?我怎样才能做到这一点?
  • 可以使用Object.values(books[i]).join(', ') 生成类似"1, 45" 的字符串并摆脱for/in 循环
  • 强烈建议你忘记 document.write() 甚至存在,而使用 dom 插入方法。 document.write() 在现代 javascript 中很少使用
  • 是的@charlietfl,这只是粗略的测试代码。实际上,在我最初的要求中,我会有两个变量说“id”和“data”,我会将它们作为参数发送到这个循环内的另一个函数,所以我想像这样设置它们id = prop.value(id); data = prop.value(data); 是否有可能这样做?
  • 可能,但我不明白...你为什么需要一个函数而不是只使用id = book[i].id
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2020-12-08
  • 2020-10-08
  • 2021-05-13
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多