php数组加载到javascript中

问题描述 投票:5回答:6

所以我是一个完整的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 javascript arrays load
6个回答
6
投票

在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 ','蝙蝠])

然后,您可以从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';

2
投票

这是开始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运行的评论的人来说,无论是早期启动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个names元素的数组"Bob"


PHP和JavaScript之间没有简单的对话。 (1)您的PHP脚本在一开始就输出JavaScript需要知道的所有内容,或者(2)使用AJAX根据需要与服务器通信。

在你的情况下,JSONEncode可能是最好的解决方案,因为它将以JavaScript Object Notation输出数组,无需基于循环的初始化。


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>
热门问题
推荐问题
最新问题