2013-03-14 103 views
0

我想解析PHP中的CSV文件並使用這些值,但是我的代碼僅從CSV文件的第一行返回數據。PHP解析CSV僅返回第一行

的CSV文件看起來像這樣

C, QXM0039326, ,   X6, 2288314208 
C, QXP0039226, 7021130, X6,  100013427 

的PHP是這樣的:

if (($handle = fopen("easy.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",", "\n")) !== FALSE) 
    { 
     // do something with the data here 
     echo $data[0] . " - ". $data[1] . " - ". $data[2] . "</br>" ; 
    } 

    fclose($handle); 
} 

這將產生預期的結果爲$ DATA [0]等,但只有的1號線CSV。 所以我得到的輸出結果是這樣的:

C - QTM0039326 - 2288314208 

這正是我想要的輸出,但是在CSV每行。

我試圖遍歷$的數據,像這樣

if (($handle = fopen("easy.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",", "\n")) !== FALSE) 
    { 
     // do something with the data here 
     foreach ($data as $row){ 
      echo $row[0] . " - ". $row[1] . " - ". $row[4] . "</br>" ; 
    } 
    fclose($handle); 
} 

} 

但是這給了我一個非常重擊導致這樣的(在繼續):

C - - 
Q - T - 0 
- - 
X - 6 - 
2 - 2 - 3 

我有什麼爲了得到我以後的結果(即C - QTM0039326 - 2288314208),但對於CSV的每一行?

回答

1

嘗試改變這一行。可能會出現換行問題。

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
+0

雖然這不是正確的答案,但它讓我回答了這個問題。 CSV中出現問題,換行符未被識別。我加了一個「;」在每行的末尾,並改爲while(($ data = fgetcsv($ handle,1000,「,」「;」))!== FALSE)哪些工作。自動檢測,因爲在你的答案也工作 - 所以現在我必須看看CSV和爲什麼它是一個重擊線突破。 謝謝! – James 2013-03-14 05:05:52

+0

很高興聽到你把它整理出來:) – GBRocks 2013-03-14 05:08:37

2

你們已經關閉了文件句柄的循環中,所以心不是對下一次迭代東西....

應該像這樣:

if (($handle = fopen("easy.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",", "\n")) !== FALSE) 
    { 
     // do something with the data here 
     echo $data[0] . " - ". $data[1] . " - ". $data[2] . "</br>" ; 
    } 

    fclose($handle); 
} 
+0

這仍然只返回第一個結果。我已經編輯了這個問題,以便將循環結束。 – James 2013-03-14 04:39:07