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=<?php echo json_encode($names);?>;
*对于编写与 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中的主要内容,如果未能解决你的问题,请参考以下文章
mysql表中的javascript多维数组-不知道那种对象对象是啥
JavaScript:DOM 加载事件、执行顺序和 $(document).ready()