4

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', {'パッケージ': ['ジオチャート']});
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>
4

4 に答える 4

6

後で文字列をトリミングする代わりにすべきことは、末尾のコンマをまったく生成しないことです。

$not_first = false;
foreach ($bans as $key => $value) {
    if ($not_first) {
        print(", ");
    }
    $not_first = true;
    print "['$key', $value]\n";
}
于 2012-11-26T19:20:55.657 に答える
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 を使用するので、すべての値をエスケープする必要はありません。

于 2012-11-26T19:25:53.037 に答える
2

あなたは何かを逃しました:

echo rtrim($resultstr, ",");

次のこともできます。

echo substr($resultstr, 0, -1);
于 2012-11-26T19:16:20.280 に答える
0

[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]
于 2012-11-26T19:28:09.903 に答える