2015-06-03 85 views
1

我想從我的csv中刪除不必要的列。我所做的是從當前的csv中讀取並使用fputcsv生成一個新的。但是,由於fputcsv在$data[21]之前添加了額外的空白列,所以數據很混亂。下面是我的代碼爲什麼fputcsv在csv中產生額外的空白列

$file_path = 'test.csv'; 
$file_output = 'new.csv'; 
if (file_exists($file_path) && filesize($file_path) > 0) { 
    if (false !== ($read_file = fopen($file_path, 'r'))) { 
     $output_file = fopen($file_output, 'w'); 
     while (false !== ($data = fgetcsv($read_file))) { 
      $outputData = array($data[1], $data[6], $data[19], $data[20], 
       $data[21]); 
      fputcsv($output_file, $outputData); 

     } 

    } 
    fclose($read_file); 
    fclose($output_file); 

} 
+0

是否存在所有引用的數組位置? var_dump他們出100%肯定 –

+0

是的,我做了......在寫出csv之前的數組位置是正確的。我手動var_dump它並檢查。謝謝。 – user1139747

+0

您可以發佈正在輸出的CSV數據的示例嗎? –

回答

0

從不同的列計數看來,在運行代碼之前需要刪除文件。您可能需要在執行開始時執行unset文件。

if (file_exists($file_output)) { 
    unset($file_output); 
} 

// continue with getting and populating CSV 
0

希望你有提到陣列的正確順序的位置:

$outputData = array($data[1], $data[6], $data[19], $data[20], 
          $data[21]); 

如果無法找到數據索引/定義,那麼fputcsv()將增加額外的列到新的CSV。

+0

嗨,我做的是var_dump $ data變量,所以我可以看到數組中的指針,並選擇數組中的必要位置寫出來。所以沒有辦法,我上面選擇的列沒有定義。這很奇怪 – user1139747

+0

然後這樣做:while(false!==($ data = fgetcsv($ read_file))){outputData [0] = $ data [1]; $ outputData [1] = $ data [6]; $ outputData [2] = $ data [19]; $ outputData [3] = $ data [20]; $ outputData [4] = $ data [21]; } fputcsv($ output_file,$ outputData); – sAcH

+0

當然..然後讓我嘗試 – user1139747