php数组加载到javascript中

Posted

技术标签:

【中文标题】php数组加载到javascript中【英文标题】:php array loading into 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;(在函数内部)要么你使用一个全局变量。 【参考方案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>

【讨论】:

以上是关于php数组加载到javascript中的主要内容,如果未能解决你的问题,请参考以下文章

php生成json数组然后javascript显示出来

传递 Javascript 数组 -> PHP

mysql表中的javascript多维数组-不知道那种对象对象是啥

JavaScript:DOM 加载事件、执行顺序和 $(document).ready()

JavaScript:DOM 加载事件、执行顺序和 $(document).ready()

使用 JavaScript 转换数组