Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
迭代PHP数组以使用PHP foreach创建Javascript数组_Php_Javascript_Arrays_Iteration - Fatal编程技术网

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

迭代PHP数组以使用PHP foreach创建Javascript数组,php,javascript,arrays,iteration,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?>',

在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;?>
];
注意JavaScript数组中的额外逗号?这引起了一些问题。我该如何重新编写这个PHP代码段,以便不打印额外的逗号,从而生成格式正确的JavaScript数组

预期产出应为:

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

我提前感谢您的帮助。

您不需要自己做这件事,PHP有一个名为的函数,它可以满足您的需要。如果由于某种原因您没有PHP5.2.0,那么在该页面的注释中有很多实现可以解决这个问题。

使用infrade()粘合数组元素。它将处理逗号

//稍后该页..在JavaScript中

var list=['您可以使用它来生成json数组:

$list = json_encode($array);
然后用Javascript阅读:

var list = <?=$list?>
var列表=

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

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

无论如何,你真的需要动态生成JS代码吗?没有其他方法来完成你的任务吗?JS生成通常被认为是一种黑客行为,在许多情况下可以很容易地避免。

这就可以做到:

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

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

var list = [
<?php foreach($array as $value): ?>
  $output[] = "'".$value->some_letter_field."'";
<?php endforeach; ?>
  echo implode(',', $output);
];
var列表=[
$output[]=“'””“$value->some_letter_field。””;
回波内爆(',',$输出);
];

很抱歉。我应该把问题说清楚。PHP数组实际上包含一个stdobject列表。使用json_encode()不太管用。数组用于在JS中绘制图表,其中的值是从数据库中提取的。为什么要在浏览器中运行JSON.parse?如果这些值是从数据库中提取的,请确保在数据库上运行正确的清理values@Sinmok是的,如果JSON对象只包含简单的值。但是,通常您需要为复杂类型执行其他格式设置,例如将日期字符串转换为日期对象。JSON.parse()允许您指定该格式回调。但是,如果它只是一组字符串或数字,则您是对的,.parse()可以省略不需要php标记,它是一个字符串,作为javascript输出到浏览器。我非常喜欢这个解决方案,但它要求数组在之前被展平。
<?php 
$filtered = array();
foreach($array as $value) {
    $filtered[] = $value->some_letter_field;
}
echo 'var list = ' . json_encode($filtered);
?>
var list = [
<?php foreach($array as $value): ?>
  $output[] = "'".$value->some_letter_field."'";
<?php endforeach; ?>
  echo implode(',', $output);
];