迭代PHP数组以使用PHP foreach创建Javascript数组

时间:2012-12-11 16:36:57

标签: php javascript arrays iteration

我在PHP数组的迭代过程中遇到了一个令人讨厌的','以产生一个Javascript数组。基本上,我所拥有的是:

<?php
  $array = array(StdObject,StdObject,StdObject);
?>

//later that page...in JavaScript

var list = [
<?php foreach($array as $value):?>
  '<?=$value->some_letter_field?>',
<?endforeach;?>
];

不幸的是,这段代码的作用是产生如下所示的输出:

var list = ['a','b','c',];

请注意JavaScript数组中的额外逗号?这导致了一些问题。我将如何重新编写此PHP代码段以便不打印额外的逗号,从而生成格式正确的JavaScript数组?

预期输出应为:

var list = ['a','b','c'];

我提前感谢您的帮助。

6 个答案:

答案 0 :(得分:9)

您不需要自己执行此操作,PHP有一个名为json_encode的函数可以执行您想要的操作。如果由于某种原因你没有PHP 5.2.0,那么该页面的评论中有很多实现可以解决这个问题。

答案 1 :(得分:5)

使用implode()粘合数组元素。它会照顾逗号     

//later that page..in JavaScript

var list = ['<?=implode("', '", $array)?>'];

答案 2 :(得分:1)

您可以使用它来生成json数组:

$list = json_encode($array);

然后在Javascript中阅读:

var list = <?=$list?>

答案 3 :(得分:0)

如何将数组转换为有效的JSON对象?

var list = JSON.parse("<?php echo json_encode($array); ?>");

无论如何,你真的需要动态生成JS代码吗?还没有另外一种方法来完成你的任务吗? JS生成通常被认为是一种黑客攻击,在许多情况下可以轻松避免。

答案 4 :(得分:0)

这样可以解决问题:

<?php 
$filtered = array();
foreach($array as $value) {
    $filtered[] = $value->some_letter_field;
}
echo 'var list = ' . json_encode($filtered);
?>

答案 5 :(得分:-1)

如果您因任何原因坚持保留当前的代码,只需:

var list = [
<?php foreach($array as $value): ?>
  $output[] = "'".$value->some_letter_field."'";
<?php endforeach; ?>
  echo implode(',', $output);
];