【问题标题】:Iterating over a PHP array inside a Javascript loop在 Javascript 循环中迭代 PHP 数组
【发布时间】:2013-05-27 11:28:06
【问题描述】:

我在尝试遍历 Javascript 数组中的 PHP 数组时遇到了一些麻烦...我在论坛上进行了搜索,虽然我发现了一些关于将 PHP 值复制到 Javascript 值的帖子,但我无法准确找到我想要实现的目标......

我有一个名为“phpArray”的 PHP 数组数组,我希望将该数组的每个值复制到一个 Javascript 数组数组中(称为“javaArray”)。我有一个 Javascript 循环,当“phpArray”为空时填充 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
        }
        ?>
    }
}

知道我该怎么做吗?

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

【问题讨论】:

  • 回显一个数组不会给你想要的值。尝试对该数组进行 json_encode 编码,然后将其放入 javascript 值中,然后在该 javascript 值上运行循环
  • 你不能只对它进行 json 编码:javaArray = &lt;?php echo json_encode($phpArray) ?&gt;;?
  • 这样不行。您必须了解服务器端脚本和客户端脚本语言之间的区别。在您的代码中,PHP 代码将在浏览器之前执行。然后将执行 Javascript 代码。因此,您需要通过 AJAX 将 PHP 数组传递给 Javascript 代码,然后对其进行处理。 "";这里 i 和 j 在服务器端执行时没有任何意义。
  • 我正准备用 @sroes 来回答 - 你应该把它添加为答案 - 得到我的支持 :)
  • 问题是 PHP 在服务器上运行,而 Javascript 开始在客户端浏览器上运行(在 PHP 代码执行完成之后)。

标签: php javascript arrays


【解决方案1】:

你应该使用json_encode:

javaArray = <?php echo json_encode($phpArray) ?>;

【讨论】:

  • 感谢 sroes,它成功了!我已将其标记为“已接受”!我现在有一个奇怪的行为:有时“javaArray”必须以“0”开头,有时必须从“phpArray”复制。然后,它在 HTML textArea 中“打印”。当 javaArray 被初始化为 '0' 时,textArea 被填充,行之间没有多余的空间;但是,当它通过“phpArray”初始化时,会在行之间打印一种“双空格”。我在数组中搜索了奇怪的字符,但没有找到任何东西……知道会发生什么吗?谢谢! :)
  • javaArray 是如何打印在 textarea 中的?
  • 哎哟!没关系,我刚刚在每行末尾找到了一个备用的“\n”......现在它完美地工作了:谢谢,sroes! :D
【解决方案2】:

根据cmets(为什么不使用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输出。

【讨论】:

    【解决方案3】:

    正如 cmets 中所建议的,这仅在 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] . ";";
         }
      }
    ?>
    

    【讨论】:

      【解决方案4】:

      我不会大量使用 PHP,但我怀疑大多数人会使用 JSON 函数或库来创建分配给 Javascript 变量的文本 - 你应该研究一下。

      在您的情况下,我可以看到您正在尝试做什么,但是当您使用时,您绝对必须将 PHP/服务器端视为为 javascript 端编写脚本。你不能混合使用这两种语言,因为没有办法让 PHP 的 $i 和 $j 与 javascripts i 和 j 不一致。

      澄清一下,javascript 的 i 和 j 在 $phpArray 和 $i 和 $j 已经超出服务器范围后很久才进入客户端计算机的范围 - “永远不会相遇”等。

      看起来您正在尝试编写的是数组分配和初始化逻辑。对于短循环,这样做没有真正的问题。你用 PHP 编写一个循环,然后用 Javascript 写出代码。 javascript 端不会有循环 - 只是一组“展开”的值。

      例如如果 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

      【讨论】:

      • @Johanovski - 请参阅 sroes 的回答,这可能就是您在 PHP 中执行 JSON 的方式:) 这绝对是将数组传递给 javascript 的最佳和最有效的方式。
      猜你喜欢
      • 1970-01-01
      • 2019-11-13
      • 2011-10-20
      • 1970-01-01
      • 2016-05-24
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      相关资源
      最近更新 更多