2012-11-26 88 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] 
相關問題