2013-01-02 43 views
2

我需要將我的MySQL php數據數組轉換爲使用highcharts庫的JavaScript。我一直在迴應一些使用JavaScript來保存圖表數據的php。到目前爲止,我可以呼應php到我已經測試並複製到JavaScript的格式,它工作正常,但只需要用PHP編寫JavaScript的一點幫助..echo javascript inside javascript

代碼:(我'已經包括BR /標記,這樣很容易看)

for($i=0; $i<4; $i++){ 
    echo '{type: "column",<br/>'; 
    echo 'name: '.($i+1).',<br/>'; 
    echo 'data: ['; 
    for($j=0; $j<count($data); $j++){ 
     echo $data[$j][$i+1].','; 
    } 
    echo ']},<br/>'; 
} 
echo '{ 
    type: "spline", 
    name: "Strike Rate",<br/>'; 
echo 'data: ['; 
for($i=0; $i<count($data); $i++){ 
    echo $data[$i][7].',';  
} 
echo '],<br/>'; 
echo 'marker: { 
    lineWidth: 2, 
    lineColor: Highcharts.getOptions().colors[3], 
    fillColor: "white" 
}'; 

輸出的PHP的:

{ type: "column", 
    name: 1, 
    data: [4,1,3,2,4,3,5,1,3,1,1,2,2,0,0,0,0,0,]}, 
{ type: "column", 
    name: 2, 
    data: [5,3,3,4,2,3,3,2,0,3,1,2,1,0,0,0,0,0,]}, 
{ type: "column", 
    name: 3, 
    data: [2,1,5,5,2,3,1,2,4,5,1,0,1,0,0,0,0,0,]}, 
{ type: "column", 
    name: 4, 
    data: [6,4,4,1,3,3,5,2,3,0,0,1,0,0,0,0,0,0,]}, 
{ type: "spline", 
    name: "Strike Rate", 
    data:  [13.33,3.45,9.38,6.67,14.81,10.00,20.00,3.85,11.54,4.76,7.14,15.38,28.57,0.00,0.00,0.00,0.00,0.00,], 
    marker: { 
     lineWidth: 2, 
     lineColor: Highcharts.getOptions().colors[3], 
     fillColor: "white" 
    } 

我試過json_encode只有附和PHP變量,但我也沒有辦法能讓它起作用。

UPDATE 答案不僅僅是呼應PHP輸出到JavaScript(我認爲這是可能的),更簡單...不管怎麼說,非常感謝大家誰作出了貢獻,沒有這樣一個偉大的社會我會找到學習新東西真的很難,找到很好的建議和提示來糾正問題。

有了正確的建議,我能夠創建Javascript變量並相應地使用它們。

<script> 
... 

var myArray = <?php echo json_encode($data[1]['data']); ?>; 
.... 
{ 
type: 'column', 
name: '1', 
data: myArray 
}, 
.... 
</script> 

新年快樂! 乾杯史蒂夫

+2

你爲什麼呼應''
標籤爲JavaScript?這是HTML,而不是JavaScript。 – David

回答

3

輸出這樣的數據的問題是錯誤的原因,很難匹配所有的大括號。你似乎錯過了整個事物的最後一個大括號和數組括號。

相反,您可以創建數據結構並使用json_encode函數將其序列化爲JSON,這種函數的誤差要小得多。這樣做,你的情況下,代碼如下:

// Set up the columns 
$arr = array(); 
for($i = 0; $i < 4; $i ++) { 
    $column = array(
    "name" => $i + 1, 
    "data" => array() 
); 
    for($j = 0; $j < count($data); $j ++) { 
    $column["data"][] = $data[$j][$i + 1]; 
    } 
    $arr[] = $column; 
} 

// Set up the spline 
$spline = array(
    "type" => "spline", 
    "name" => "Strike Rate", 
    "data" => array(); 
); 
for($i = 0; $i < count($data); $i ++) { 
    $spline["data"][] = $data[$i][7]; 
} 
$arr[] = $spline; 

// Output json 
echo json_encode($arr); 
+0

乾草隊友感謝一堆!對於highcharts所需的輸出來說,它幾乎已經完美無缺了.js我明天早上會有一個破解來獲得這個工作,但是你提供的很棒! –

+0

謝謝,很高興它幫助 –

2

請存放在隱藏字段PHP的值,並通過使用該ID在javascript

1

我想你的問題是用這種線給一些ID到現場&訪問值:

data: [6,4,4,1,3,3,5,2,3,0,0,1,0,0,0,0,0,0,]}, 

刪除尾隨,在陣列中有

data: [6,4,4,1,3,3,5,2,3,0,0,1,0,0,0,0,0,0]}, 

希望這會有所幫助。

0

您正在該數據列末尾添加額外的逗號。這將打破JSON。使用implode功能。

for($i=0; $i<4; $i++){ 
    echo '{type: "column",<br/>'; 
    echo 'name: '.($i+1).',<br/>'; 
    echo 'data: [' 
    echo implode(',', $data); 
    echo ']},<br/>'; 
} 
5

您正在混合使用PHP,JavaScript和HTML,最終陷入混亂。下面是一個例子,你如何創建一個JavaScript對象常量PHP:

<?php 

$values = array(); 

for ($i=0; $i < 4; $i++) { 
    $value = array(
     'type' => 'column', 
     'name' => $i + 1, 
     'data' => array() 
    ); 
    for ($j=0; $j < count($data); $j++){ 
     $value['data'][] = $data[$j][$i+1]; 
    } 
    $values[] = $value; 
} 
?> 

<!-- HTML stuff here --> 

<script> 
    var data = <?php echo json_encode($values); ?>; 
    // JavaScript that processes `data` here 
</script> 

<!-- More HTML here --> 

的理念是:

  • 首先建立你的數據結構,使用數組的數組。
  • 使用json_encode將數組轉換爲JSON,這也是JS中的有效對象字面值。
  • 將PHP嵌入到HTML或JS中,不要生成(手動)HTML或JS。

我不知道在哪個格式的數據必須是,但我離開這個給你找出來。迭代並提取數據也可能會得到改進,但由於我們不知道您有哪些數據,現在就足夠了。

+0

感謝felix,我正在使用你和斯圖爾特的建議......我會很快回報!謝謝:) –

1

處理JavaScript中的PHP數組另一種最好的辦法是json_encode

通JSON編碼數組的JavaScript從PHP像

json_encode($result_array); 

和處理使用jQuery JS JSON數據。這將比你現在正在做的事情容易。

0
$data=array(); 
for($i=0; $i<4; $i++){ 
$data['type']="column"; 
for($j=0; $j<count($data); $j++){ 
$data['data'][] = $data[$j][$i+1]; 
} 
} 
json_encode($data);