所以我完全是php/javascript的noob。
我正在尝试将一个完整的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。我该怎么解决?
在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','dog','bat])
然后,您可以从JavaScript数组中获取值,如下所示:
<script>
console.log(myarray[2]);
</script>
您的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';
对于开始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);?>;
*对于那些写关于Javascript与PHP同时运行的评论的人来说,无论是通过早期启动JS还是使用AJAX,是的,我知道,但对于初学者来说,PHP的模型完全生成,然后JS开始运行更容易理解。
假设$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输出数组,从而无需基于循环的初始化。
取决于数组的维数。S简单阵列的最佳方式:
var names = new Array(<?php echo implode(',', $php_array);?>);
我认为json_encode()
就是您要搜索的内容。
示例
<?php
$myArray = array('generating', 'some', 'items');
?>
<script type="text/javascript>
var myArray = <?= json_encode($myArray); ?>;
</script>