2012-07-04 59 views
0

卸下行我有一個數組:從CSV,然後輸出(下載)用PHP

$remove_rownumbers = array(1, 4, 7, 9, 2); 

這些rownumbers,我希望從在PHP加載CSV除去。

現在即時通訊思想要經過排,一個計數器和一個in_array如果這樣的語句:

$row = 1; 
if (($handle = fopen($CSV_FILE, "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1500, ",")) !== FALSE) { 
     if(in_array($row, $remove_rownumbers) == false) // if its not in the remove array, keep it 
     { 
     // (...) the output part, where im echoing out each row by foreach($data ...) 
     } 
     $row++; 
    } 
} 

但我怎麼可以輸出回波現在並再次將其存儲在一個CSV是否正確?而這樣一來,這是在陣列中的行數是不是在這個新

我發現它像一個開始:

header('Content-Encoding: UTF-8'); 
header('Content-type: application/ms-excel; charset=utf-8'); 
header('Content-Disposition: attachment; filename=output.csv'); 
echo "\xEF\xBB\xBF"; 
$fp = fopen("php://output", "w"); 
+0

你的CSV是怎樣的? –

+0

http://pastebin.com/YLQAL8Hc這裏有一個片段。 – Karem

+1

你有沒有像任何理智的人一樣使用數據庫的很好的理由? –

回答

0

你需要fopen()函數一個新的CSV文件,得到的手柄,但它很簡單:

$row = 1; 

if (($handle = fopen($CSV_FILE, "r")) !== FALSE) { 

    while (($data = fgetcsv($handle, 1500, ",")) !== FALSE) { 

     if (in_array($row, $remove_rownumbers) == false) { 
      fputcsv($newFile, $data); 
     } 
     $row++; 
    } 
} 

我忘了你想要下載它的位。將重定向標頭用於新文件。

header("Location: http://www.example.com/newfile.csv"); 
+0

嗯我認爲它應該取代當前處理的CSV文件中的數據,所以它從該CSV中刪除沒有newfile.csv的解決方案是這樣的可能的 – Karem

+0

不,你不能閱讀和寫入同一個文件,而不會陷入一團糟。您可以編寫新文件,刪除舊文件,重命名新文件。 – SpacedMonkey