0

在迭代 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'];

我提前感谢您的帮助。

4

6 回答 6

9

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

于 2012-12-11T16:38:03.043 回答
5

使用 implode() 粘合数组元素。它将注意逗号

//later that page..in JavaScript

var list = ['<?=implode("', '", $array)?>'];
于 2012-12-11T16:39:12.310 回答
1

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

$list = json_encode($array);

然后用 Javascript 阅读它:

var list = <?=$list?>
于 2012-12-11T16:40:06.610 回答
1

这可以解决问题:

<?php 
$filtered = array();
foreach($array as $value) {
    $filtered[] = $value->some_letter_field;
}
echo 'var list = ' . json_encode($filtered);
?>
于 2012-12-11T16:55:42.240 回答
0

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

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

无论如何,你真的需要动态生成 JS 代码吗?没有其他方法可以完成您的任务吗?JS 生成通常被认为是一种 hack,在许多情况下可以轻松避免。

于 2012-12-11T16:43:15.187 回答
-1

如果您出于某种原因坚持保留当前代码,只需:

var list = [
<?php foreach($array as $value): ?>
  $output[] = "'".$value->some_letter_field."'";
<?php endforeach; ?>
  echo implode(',', $output);
];
于 2012-12-11T16:58:16.993 回答