【问题标题】:php array loading into javascriptphp数组加载到javascript中
【发布时间】:2012-04-04 04:07:30
【问题描述】:

所以我是个 php/javascript 菜鸟。

我正在尝试将完整的 php 数组加载到 javascript 数组中。 我为 Javascript 编写了这个:

    var names = new Array();
for(var i = 0; i < 48; i++) {
    names[i] = "<?php echo giveJS() ?>";
}

这适用于 php

static $counter = 0;

function giveJS() {
    global $names;
    global $counter;
    $counter++;
    return $names[$counter]; 
}

我已经检查了 php 数组是否正确填充了数据。 当我在 javascript 中编写输出行时,例如

document.write(names[10]);

它只给了我 php 数组中的第一个条目,所以似乎每次重复 for 循环时,它都会从头开始初始化 php 文件,因此将计数器设置为 0。 我该如何解决?

【问题讨论】:

  • 要么static $counter = 0;(在函数内部)要么你使用一个全局变量。

标签: php javascript arrays load


【解决方案1】:

在php中

//Bla being the php array you want to give to javascript. Create it however you like
$bla = array();
$bla[] = 'cat';
$bla[] = 'dog';
$bla[] = 'bat';
echo '<script>var myarray = '.json_encode($bla) .';</script>';

然后上面的代码将输出一个脚本标签,其中包含一个名为 myarray 的变量,然后其内容将是指定上述数组的 JSON(json_encode 将数组格式化为 javascript 内部语法 - 该数组可能看起来像 ['cat' ,'狗','蝙蝠])

然后您可以从 JavaScript 数组中获取值:

<script>
 console.log(myarray[2]);
</script>

【讨论】:

    【解决方案2】:

    您的 PHP 代码在您的 Javascript 之前执行,因此以这种方式使用它没有意义。

    相反,您应该这样做:

    <?php for ($i=0;$i<48;$i++):?>
         name[<?php echo $i;?>] = "<?php echo giveJS();?>";
    <?php endfor; ?>
    

    其实,如果你的 PHP 这么简单,你就不需要函数了:

    <?php foreach ($names as $i=>$name):?>
        name[<?php echo $i;?>] = "<?php echo $name;?>";
    <?php endforeah;?>
    

    在这两种情况下,您都会有这样的 Javascript:

    name[0] = 'name0';
    name[1] = 'name1';
    ...
    name[47] = 'name47';
    

    【讨论】:

    • 不客气 :) 但是,您应该阅读其他答案,他们比我解释得更好。并且使用 json_encode 肯定比我的解决方案更干净;)(json 是一种可以被 Javascript 直接读取的格式)
    【解决方案3】:

    对于开始 Web 开发的人来说,这是一个常见的错误。需要意识到的重要一点是,您的所有 PHP 代码都在 javascript 启动之前运行*。如果您查看进入浏览器的 javascript,您会看到

        var names = new Array();
    for(var i = 0; i < 48; i++) {
        names[i] = "foo";
    }
    

    这解释了为什么每个元素都是相同的。更好的方法是在 PHP 中使用 json_encode 将数组转换为 JS 变量。像这样:

    var names=&lt;?php echo json_encode($names);?&gt;;

    *对于编写与 PHP 同时运行的 Javascript 的 cmets 的人,无论是通过早期启动 JS 还是使用 AJAX,是的,我知道,但是对于初学者来说,PHP 模型完全生成然后 JS 启动运行更容易理解。

    【讨论】:

      【解决方案4】:

      假设$names[1]"Bob"..

      您的 PHP 脚本将在服务器上运行输出以下 JavaScript:

      var names = new Array();
      for(var i = 0; i < 48; i++) {
          names[i] = "Bob";
      }
      

      这又会在您的浏览器(客户端)中运行,创建一个包含 48 个 "Bob" 元素的数组 names


      PHP 和 JavaScript 之间没有简单的对话。要么 (1) 你的 PHP 脚本输出 JavaScript 一开始就需要知道的所有内容,要么 (2) 你根据需要使用AJAX 与服务器通信。

      在您的情况下,JSONEncode 可能是最好的解决方案,因为它将以 JavaScript Object Notation 输出数组,从而无需基于循环的初始化。

      【讨论】:

        【解决方案5】:

        取决于你的数组有多少维。简单数组的最短方法:

         var names = new Array(<?php echo implode(',', $php_array);?>);
        

        【讨论】:

          【解决方案6】:

          我认为json_encode() 是您要搜索的内容。

          例子

          <?php
          $myArray = array('generating', 'some', 'items');
          ?>
          <script type="text/javascript>
              var myArray = <?= json_encode($myArray); ?>;
          </script>
          

          【讨论】:

            猜你喜欢
            • 2014-02-04
            • 1970-01-01
            • 1970-01-01
            • 2014-04-22
            • 2014-07-08
            • 1970-01-01
            • 2011-12-28
            • 1970-01-01
            • 2014-08-16
            相关资源
            最近更新 更多