php数组加载到javascript中


php array loading into javascript

所以我完全是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>