我在尝试迭代Javascript数组中的PHP数组时遇到了一些麻烦......我在论坛上搜索过,虽然我发现了一些关于将PHP值复制到Javascript值的帖子,但我无法找到我想要实现的目标...
我有一个名为“phpArray”的PHP数组,我希望将这个数组的每个值复制到一个Javascript数组中(称为“javaArray”)。当“phpArray”变空时,我有一个Javascript循环填充Javascript数组,我只是试图使用PHP索引迭代“phpArray”。但是,它好像PHP索引永远不会增加,我唯一可以获得的数组值是“phpArray”中的第一个......这是与此对应的代码片段:
for (var i = 0; i < javaArray.length; i++) {
javaArray[i] = new Array(<?php echo $numCols; ?>);
for (var j = 0; j < javaArray[i].length; j++) {
javaArray[i][j] = "0";
<?php
if(sizeof($javaArray) > 0)
{
?>
javaArray[i][j] = "<?php echo $phpArray[$i][$j]; ?>";
<?php
}
?>
}
}
我对如何做到这一点有任何想法?
提前感谢您的时间和精力! :)
答案 0 :(得分:6)
您应该使用json_encode:
javaArray = <?php echo json_encode($phpArray) ?>;
答案 1 :(得分:0)
根据评论(为什么不使用JSON编码?)JS和PHP之间的连接只是单向的,所以你需要用PHP创建完整的JS代码。
我建议做类似的事情(为了清晰起见,一维数组):
// this is PHP code
echo "var JavaArray = array("; // this echoes declaration of JavaScript array
foreach($phpArray as $item){ // this starts iterating PHP array
echo $item.', '; // this "copies" PHP array item to JavaScript array item
}
echo ')'; // close JS declaration of array
这实际上并不完美,因为它会在结尾处留下,
但你明白了。所有JS代码都需要由PHP输出。
答案 2 :(得分:0)
根据评论中的建议,仅当javascript是从.php
页面生成时才会有效。如果它是.js
脚本,则无效。
最简单的方法是
var javaArray = <?php echo json_encode($phpArray) ?>;
正如其他人所建议的那样。
你的代码不起作用的原因是你有一个javascript循环,而不是PHP循环。在PHP中,您可以这样做:
var javaArray = [];
<?php
for ($i=0; $i < count($phpArray); $i++) {
for ($j=0; $j < count($phpArray[$i]); $j++) {
echo "javaArray[$i][$j] = " . $javaArray[$i][$j] . ";";
}
}
?>
答案 3 :(得分:0)
我没有做大量的PHP,但我怀疑大多数人会使用JSON函数或库来创建分配给Javascript变量的文本 - 你应该研究一下。
在你的情况下,我可以看到你正在尝试做什么,但是当你使用时,你必须把PHP /服务器端想象为编写javascript端的脚本。你不能混合使用这两种语言,因为没有办法用javascripts i和j来保持PHP的$ i和$ j。
澄清一下,javascript的i和j在$ phpArray和$ i和$ j超出服务器范围之后很久就进入了客户端机器的范围 - '从来没有twain会遇到'等等。
看起来你要写的是数组分配和初始化逻辑。对于短循环这样做没有真正的问题。您在PHP中编写循环代码,并在Javascript中编写代码。 javascript方面没有循环 - 只是一组'展开'的值。
e.g。如果i和j从0变为2,数字0到8,则编写PHP代码以输出以下内容:
javaArray = new Array(2);
javaArray[0] = new Array(2);
javaArray[0][0] = 0;
javaArray[0][1] = 1;
javaArray[0][2] = 2;
javaArray[1] = new Array(2);
javaArray[1][0] = 3;
javaArray[1][1] = 4;
javaArray[1][2] = 5;
javaArray[2] = new Array(2);
javaArray[2][0] = 6;
javaArray[2][1] = 7;
javaArray[2][2] = 8;
再次注意,在初始化期间,javascript没有循环 - 这些都在PHP端。一旦你有了数据,你可以在浏览器中使用javascript循环它或索引到它(但不是PHP)。
希望这会有所帮助。
标记 ia.uk.com