【问题标题】:Stripping last comma from PHP foreach loop从 PHP foreach 循环中删除最后一个逗号
【发布时间】:2012-11-26 19:14:32
【问题描述】:

我想知道如何在 javascript 中运行的 PHP 脚本中删除此 foreach 循环中的尾随逗号。

<html>                                                                                                                                                                              
      <head>                                                                                                                                                                            
    <script type='text/javascript' src='https://www.google.com/jsapi'></script>                                                                                                     
    <script type='text/javascript'>                                                                                                                                                 
     google.load('visualization', '1', {'packages': ['geochart']});                                                                                                                 
     google.setOnLoadCallback(drawRegionsMap);                                                                                                                                      

  function drawRegionsMap() {
    var data = google.visualization.arrayToDataTable([
    ['Country','Blocks'],
  <?php
    foreach ($bans as $key => $value)
                print"['$key', $value],\n";
    ?>
    ]);

    var options = {
                    backgroundColor : '#555555',
                    colors : ['#FFFF00', '#FF0000']
                    };

    var chart = new google.visualization.GeoChart(document.getElementById('chart_div'));
    chart.draw(data, options);
};
</script>
  </head>
  <body>
<div id="chart_div" style="width: 900px; height: 500px;"></div>
  </body>
</html>

这会导致一个问题,因为我得到一个尾随逗号,我尝试了 implode 方法和 rtrim 方法,但这些方法似乎都没有工作(我也从未使用过这些函数,所以我可能做错了)

我的内爆方法是:

<?php
    $resultstr = array();
    foreach ($bans as $key => $value)
                print"['$key', $value],\n";
  $resultstr = implode(",", $resultstr);
    ?>

我的 rtrim 方法是:

  <?php
  $resultstr = array();
    foreach ($bans as $key => $value)
                print"['$key', $value],\n";
  echo rtrim($resultstr, ",");
    ?>

编译后是这样的:

    <html>                                                                                                                                                                              




google.load('可视化', '1', {'packages': ['geochart']});
google.setOnLoadCallback(drawRegionsMap);

  function drawRegionsMap() {
    var data = google.visualization.arrayToDataTable([
    ['Country','Blocks'],
  ['Japan', 11],
['United States', 45],
['Argentina', 1],
         ]);

    var options = {
                    backgroundColor : '#555555',
                    colors : ['#FFFF00', '#FF0000']
                    };

    var chart = new google.visualization.GeoChart(document.getElementById('chart_div'));
    chart.draw(data, options);
    };
    </script>
  </head>
  <body>
    <div id="chart_div" style="width: 900px; height: 500px;"></div>
  </body>
</html>

【问题讨论】:

    标签: javascript php


    【解决方案1】:

    您应该做的而不是事后修剪字符串根本不会生成尾随逗号:

    $not_first = false;
    foreach ($bans as $key => $value) {
        if ($not_first) {
            print(", ");
        }
        $not_first = true;
        print "['$key', $value]\n";
    }
    

    【讨论】:

    • 这非常有道理,非常感谢(再过 3 分钟,直到我可以接受您的回复作为答案。)
    【解决方案2】:

    这可能是另一种方法:

    var data = google.visualization.arrayToDataTable(<?php
    $table = array(array('Country', 'Blocks'));
    foreach($bans as $key => $value) {
        $table[] = array($key, $value);
    }
    echo json_encode($table);
    ?>);
    

    我经常使用 json_encode,所以我不必担心转义所有值。

    【讨论】:

      【解决方案3】:

      你错过了什么:

      echo rtrim($resultstr, ",");
      

      你也可以这样做:

      echo substr($resultstr, 0, -1);
      

      【讨论】:

      • 我只是在我的PHP脚本末尾尝试了这两个,并且在查看站点的HTML源时脚本结果仍然相同,将编译源添加到原始问题。
      • @user1848130 也试试我的解决方案,可能会有所帮助。
      • 同意。绝对更聪明,首先没有尾随逗号,也使用@vstm建议的json_encode是个好主意。
      • 我猜对这种方法来说,内爆要容易得多
      【解决方案4】:

      您可以创建一个包含[key, value] 片段的数组,然后将它们与implode 粘合:

      PHP

      <?php
      $arr = array();
      $arr['key1'] = 'val1';
      $arr['key2'] = 'val2';
      $arr['key3'] = 'val3';
      
      function PrepareValues(&$item, $key) {
          $item = "['$key', $item]";
      }
      array_walk_recursive($arr, "PrepareValues");
      $resultstr = implode(",\n", $arr);
      print($resultstr);
      ?>
      

      输出

      ['key1', val1],
      ['key2', val2],
      ['key3', val3]
      

      【讨论】:

        猜你喜欢
        • 2013-11-24
        • 2018-02-14
        • 2020-01-24
        • 1970-01-01
        • 1970-01-01
        • 2019-10-04
        • 1970-01-01
        • 2015-08-05
        • 1970-01-01
        相关资源
        最近更新 更多