2013-04-24 52 views
-1

我有一個簡單的腳本看起來像:PHP JSON編碼來自CSV

$row_to_show = 2; 

$handle = fopen('myfile.csv', 'r'); 
if ($handle !== false) { 
    $row_count = 0; 
    while($csv_line = fgetcsv($handle)) { 
     $row_count++; 
     if ($row_count == $row_to_show) { 
      $latestResults = ($csv_line); 
      echo json_encode($latestResults); 
     } 
    } 
} 

它吸引CSV文件的第2行。然後將其編碼爲json,並如下顯示:

[「20-Apr-2013」​​,「46」,「8」,「34」,「38」,「44」,「42」 , 「14」, 「4」, 「灰背隼」]

然而,我想要做的是一樣的東西:

"Date":20-Apr-2013,"ball1":46,"ball2":8,"ball3":34,"ball4":38,"ball5":44"ball6":42,"bonusball":14,"set":4,"machine":MERLIN 

如何實現這一目標?在此先感謝

+0

你有沒有標題作爲文件的第一行? – 2013-04-24 19:54:36

+0

查看array_combine()來添加鍵。首先執行_build_你的數組,然後在while循環之後執行'echo json_encode();'。 – Wrikken 2013-04-24 19:55:28

+0

是的,我在第1行做 – Bushell 2013-04-24 19:55:34

回答

0

從它的外觀來看,JSON輸出將是我期望的CSV,因爲CSV只是一組值。

如果你想添加「列標題」信息,你需要創建一個關聯數組。

有時候,一個CSV的第一行包含頭信息,如果是這樣的話,你可以將其保存以供日後使用:

/... 
$headers = null; 
while($csv_line = fgetcsv($handle)) { 
    $row_count++; 
    // The first row contains the headers, save it 
    if($row_count == 1) { 
     $headers = $csv_line; 
    } 
//.. 

如果不是這樣,你需要創建它手動...

$headers = array('Date', 'ball1', 'ball2',...); 

然後,您可以將它們合併成一個單一的關聯數組(看到這麼一個問題:"PHP - Merge two arrays (same-length) into one associative?"

if ($row_count == $row_to_show) { 
    $latestResults = ($csv_line); 
    $output = array_combine($headers, $latestResults); 
    echo json_encode($output); 
} 

我希望有幫助!

編輯

感謝馬里奧斯評論(我看到了我寫了這個之後),它出現在SO質疑"CSV to Json with header row as key"幾乎涵蓋了同樣的事情。