【问题标题】:Iterating over PHP array to create Javascript array with PHP foreach迭代 PHP 数组以使用 PHP foreach 创建 Javascript 数组
【发布时间】:2012-11-29 06:08:27
【问题描述】:

在迭代 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 sn-p 以便不会打印额外的逗号,从而生成格式正确的 JavaScript 数组?

预期的输出应该是:

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

提前感谢您的帮助。

【问题讨论】:

    标签: php javascript arrays iteration


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这样就可以了:

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

      【讨论】:

      • 这对我有用,但在echo 'var list = '.json_encode($filtered).';'; 中缺少;
      【解决方案3】:

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

      //later that page..in JavaScript
      
      var list = ['<?=implode("', '", $array)?>'];
      

      【讨论】:

      • 我很喜欢这个方案,但是需要先将数组展平。
      【解决方案4】:

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

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

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

      【讨论】:

      • 该数组用于在JS中绘制图表,其中值是从数据库中提取的。
      • 当它要在浏览器中运行时,你为什么要 JSON.parse 这个?
      • @Sinmok 如果这些值是从数据库中提取的,请确保您对这些值进行了适当的清理
      • @Sinmok 是的,如果 JSON 对象仅包含简单值,则无需解析它。但是,您通常希望对复杂类型进行额外的格式化,例如将日期字符串转换为日期对象。 JSON.parse() 允许你指定格式化回调。但如果只是一堆字符串或数字,你是对的,.parse() 可以省略
      【解决方案5】:

      你可以用它来生成json数组:

      $list = json_encode($array);
      

      然后用 Javascript 读取它:

      var list = <?=$list?>
      

      【讨论】:

      • 不需要 php 标签,它是作为 javascript 输出到浏览器的字符串。
      【解决方案6】:

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

      【讨论】:

      • 我很抱歉。我应该把问题说得更清楚。 PHP 数组实际上包含一个标准对象列表。使用 json_encode() 不太奏效。
      猜你喜欢
      • 2015-06-06
      • 2013-03-30
      • 1970-01-01
      • 2021-01-26
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 2011-05-09
      相关资源
      最近更新 更多