2012-11-26 89 views
4

我想知道如何在JavaScript中运行的PHP脚本中移除此foreach循环中的尾随逗号。从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> 

这使我得到一个结尾逗号,我已经试过了内爆法和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',{ '包':[ '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> 

回答

6

你应该做的,而不是微调串之后不产生后面的逗号都什么:

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

这非常有意义,非常感谢(3分钟以上,直到我可以接受你的回答作为答案)。 – user1848130

+0

@ user1848130不客气。 – 2012-11-26 19:26:18

2

你错过了一些东西:

echo rtrim($resultstr, ","); 

你也可以这样做:

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

我只是想这两个的在我的PHP脚本的末尾,脚本结果仍然是相同的查看网站的HTML源代码,将编译后的源代码添加到原始问题中。 – user1848130

+0

@ user1848130尝试我的解决方案以及可能会有所帮助。 – 2012-11-26 19:21:47

+0

同意。明智的做法是不要在第一时间使用尾随逗号,也可以使用@vstm建议的json_encode,这是个不错的主意。 – nielsiano

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所以我没有照顾逃避所有的值。

+0

+1当然,json_encode! :) –

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] 
相关问题