将PHP数组加载到JavaScript中

6

我是一名完全不懂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数组中,它只给了我第一个条目,因此似乎每次循环都重新初始化了PHP文件,从而将计数器设置为0。我该如何解决这个问题?


要么在函数内部使用 static $counter = 0;,要么使用全局变量。 - hakre
6个回答

9

在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的script标签,其内容将是指定上述数组的JSON(json_encode将数组格式化为javascript内部语法 - 该数组可能看起来像['cat','dog','bat'])
您可以按如下方式从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读取的格式) - haltabush

2

对于刚开始进行Web开发的人来说,这是一个常见的错误。重要的是要意识到在javascript开始之前,所有的PHP代码都已经运行完毕。如果你查看一下在浏览器中显示的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开始运行的模式更容易理解。


1

假设$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 对象表示法 中输出数组,消除了基于循环的初始化的需要。


0

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

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

0

我认为你正在寻找的是json_encode()

示例

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接