迭代Javascript循环中的PHP数组

时间:2013-05-27 11:28:06

标签: php javascript arrays

我在尝试迭代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
        }
        ?>
    }
}

我对如何做到这一点有任何想法?

提前感谢您的时间和精力! :)

4 个答案:

答案 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