2016-12-16 82 views
0

我知道這個問題已經回答了很多次,但由於對對象,數組,字符串和JSON的混淆,我仍然遇到了麻煩。
試圖通過使用Highcharts實現圖表我做了一個PHP從數據庫中提取數據。簡化,讓我們說,這些只是一些值對(即一天,訪問)。
我想建立一個數組發送給JS。 我這樣做是:Javascript/PHP恢復陣列陣列

while ($row = mysql_fetch_array($result)) { 
$dat = substr($row['data'],8,2);  //strip to day 
$pag = $row['pagina']; 
$data[] = "[".$dat.",".$pag."]"; 
} 
$finalData = join($data, ','); 

//echo json_encode($finalData); // I get [09,20],[12,15],[12,11],[12,18] 
echo "[".$finalData."]";  //I get [[09,20],[12,15],[12,11],[12,18]] 

正如你看到的,我試過兩種不同的方法(和一些變化有/無json_encode)。

在客戶端,我聲明:var donwloaded = [[]];(數組的數組),其填充在這種方式:

.... 
var response = xmlhttp.responseText; 
// donwloaded = JSON.parse(response); 
donwloaded = response; 

我再次以兩種方式嘗試。
以所有可能的組合,在'donwloaded'結果作爲字符串結束(根據Mozilla調試器),並且圖表未填充。

耐人尋味的是,如果JS我聲明這一點:

var testValues = [ [1,10],[2,20],[3,30],[4,40] ]; 

出現類似於我從PHP獲取,Mozilla的說,這4個數組的數組,並Highchart正確顯示。

我確信我沒有犯過錯誤,但經過2天的測試後,我更加困惑。

+3

構建一個正常的PHP數組(多維),然後在結果中應用'json_encode'。將'$ data [] =「[」。$ dat。「,」。$ pag。「]」;'用'$ data [] = [$ dat,$ pag];'替換爲開頭。 –

+1

請勿使用mysql_ *函數。請看看:http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php更多信息 –

+0

你在找什麼? – rahul

回答

0

我做到了! 請不要問我,因爲我可能比我開始時更困惑。
我希望發佈此消息來分享像我這樣的其他初學者的解決方案。

第一步是遵循魯斯蘭奧斯曼諾夫建議:

Replace $data[] = "[".$dat.",".$pag."]"; with $data[] = [$dat, $pag]; 

很簡單,很有效。
經過幾次嘗試(即嘗試構建一個多維數組),最後我只是放了一個echo json_encode($data);,大部分問題都沒有了。
在客戶端,通過簡單的donwloaded = JSON.parse(response);,我終於收到甚至Mozilla認可的陣列數組,以及Highcharts。

無論如何仍然存在一個問題:數組中的值在雙引號內被「串化」,可能是由於編碼造成的,Highcarts並沒有將值顯示出來。
我更改了PHP的$數據$data[] = [(int)$dat,(int)$pag];
將值轉換爲數字,現在我終於可以看到圖表...很好。
再次,我幾乎可以肯定有更高效和優雅的方法,但它做我所需要的,我很高興。 `