2012-05-18 47 views
0

我試圖在Google的Geochart上繪製一些城市。這個功能完美地工作,並將繪製城市。php在javascript函數中生成的數組

function drawMarkersMap() { 
    var newInfo = google.visualization.arrayToDataTable([ 
    ['City'], 
    ['San Diego'], 
    ['Los Angeles'], 
    ['San Jose'] 
    ]); 

雖然這很好,所有,我從我的數據庫通過PHP生成我的城市。所以,讓我們只是說,我們有這個php陣列

<?php $city = array("San Diego", "Los Angeles", "San Jose"); ?> 

現在來到我正在努力的部分。我似乎無法得到一個循環正常工作,以便我可以分別輸出每個城市。

當我這樣做只是第一個城市的陣列(聖地亞哥)將顯示,我明白爲什麼......我只是表明這種方法至少會打印「東西」

function drawMarkersMap() { 
    var newInfo = google.visualization.arrayToDataTable([ 
    ['City'], 
    ['<?php foreach($city as $location){ echo json_encode($location); } ?>'] 
]); 
//options here 
} 

所以,我試圖通過循環和使用JavaScript打印陣列中的每個項目,但我似乎不具有邏輯正確

function drawMarkersMap() { 
    var newInfo = google.visualization.arrayToDataTable([ 
    ['City'], 
    for(i=0;i<json_encode($city).count;i++){ 
    //some kind of print statement mixing php and javascript. I need help here please! 
    } 
]); 

這裏就是整個頁面

<head> 
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
<title>Google Visualization API Sample</title> 
<script type="text/javascript" src="http://www.google.com/jsapi"></script> 

<? 
$city = array("San Jose","Los Angeles","San Diego"); 
foreach($city as $key=>$value) { 
    echo "$value"; 
} 
?> 
<script type="text/javascript"> 
google.load('visualization', '1.1', {packages: ['geochart']}); 


function drawMarkersMap() { 
    var newInfo = google.visualization.arrayToDataTable([ 
    ['City'], 
['<?php echo json_encode($city); ?>'] 
]); 

var chart = new google.visualization.GeoChart(document.getElementById('chart_div')); 

chart.draw(newInfo, {width: 556, height: 347, displayMode: 'markers', region: 'US-CA', resolution: 'provinces'}); 
} 


google.setOnLoadCallback(drawMarkersMap); 
</script> 
</head> 
<body style="font-family: Arial;border: 0 none;"> 
<div id="chart_div"></div> 
</body> 
</html> 
+0

你需要發佈'json_encode()'實際輸出的內容,而不僅僅是函數。你的JSON可能是畸形的,或者不是數組,而是一個對象,谷歌的功能可能會嘔吐。 – Bojangles

+0

我不太確定我明白你的意思。你可以給我一個例子或修改我的? – user1104854

+0

目前,你所提供的只是'<?php echo json_encode($ city); ?>',這是無用的,因爲不可能知道'json_encode()'輸出的字符串是否適合你插入的JS。請不要發佈PHP,而是將它輸出的JSON字符串發佈到瀏覽器。 – Bojangles

回答

2
<?php $city = array(array('City'), array('San Diego'), array('Los Angeles'), array('San Jose')); ?> 

var newInfo = google.visualization.arrayToDataTable(<?php echo json_encode($city); ?>); 

這將重新創建與原始腳本完全相同的數組結構。

+0

謝謝,工作完美。我現在看到@JamWaffles在討論陣列設置不當的問題。 – user1104854

1

爲什麼不使用implode函數?

<script type="text/javascript"> 
<?php $city = array("San Diego", "Los Angeles", "San Jose"); ?> 
    function drawMarkersMap() { 
     var newInfo = google.visualization.arrayToDataTable([ 
     ['City'], 
     ['<?php echo implode("'],\n\t\t['",$city) ?>'] 
     ]); 
    } 
</script> 

這將導致

<script type="text/javascript"> 
    function drawMarkersMap() { 
     var newInfo = google.visualization.arrayToDataTable([ 
     ['City'], 
     ['San Diego'], 
     ['Los Angeles'], 
     ['San Jose']]); 
    } 
</script> 

根據要求...

<script type="text/javascript"> 
<?php $city = array("San Diego", "Los Angeles", "San Jose"); ?> 
    function drawMarkersMap() { 
     var newInfo = google.visualization.arrayToDataTable([ 
     ['City'], 
     ['<?php foreach($city as &$c)$c=htmlspecialchars($c,ENT_QUOTES,'UTF-8'); echo implode("'],\n\t\t['",$city); ?>'] 
     ]); 
    } 
</script> 

..although我應該與事實一致認爲,使用JSON是非常實用:)

+0

這是有效的,直到你的值包含引號或斜槓......讓'json_encode'處理它。 – deceze

+0

@deceze我添加了一個替代我的帖子,但我同意。 – inhan

+0

當您嘗試轉義JSON語法時,'htmlspecialchars'不一定有幫助。 – deceze