我在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'];
我提前感谢您的帮助。
答案 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);
];