从PHP的foreach循环中删除最后一个逗号

4
我想知道如何在我的PHP脚本中的javascript中运行的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方法,但似乎都没有起作用(我也从未使用过这些函数,可能使用不当)。我的implode方法如下:
<?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('visualization', '1', {'packages': ['geochart']});
google.setOnLoadCallback(drawRegionsMap);

这段代码是谷歌地图API的一部分,它用于在网页上显示地图和相关信息。其中包括一个叫作geochart的可视化工具包,可以帮助用户使用地理位置数据创建交互式地图。函数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>
4个回答

6
与其在生成字符串后删除尾随逗号,你应该根本不生成尾随逗号。
$not_first = false;
foreach ($bans as $key => $value) {
    if ($not_first) {
        print(", ");
    }
    $not_first = true;
    print "['$key', $value]\n";
}

那很有道理,非常感谢(还有3分钟我才能接受您的回答作为答案)。 - user1848130

4
这可能是另一种方法:
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以便不必担心转义所有的值。


2
你漏掉了一些东西:
echo rtrim($resultstr, ",");

你也可以这样做:

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

我刚刚在我的PHP脚本末尾尝试了这两个选项,但是当查看网站的HTML源代码时,脚本结果仍然相同。我将编译后的源代码添加到原始问题中。 - user1848130
@user1848130 也可以试试我的解决方案,可能会有帮助。 - user529758
同意。最好一开始就不要有尾随逗号,同时像@vstm建议的那样使用json_encode是个好主意。 - nielsstampe
我猜 implode 对于这种方法来说更容易。 - Ahsan

0
您可以创建一个包含 [键,值] 元素的数组,然后使用 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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接