2012-12-07 90 views
1

我有一件有趣的工作要完成如何使用fgetcsv從CSV中獲取特定列?

我有很多電子表格,我已經轉換爲CSV - 這些電子表格最初是作爲具有一定數量的列的模板。

不幸的是,隨着時間的推移,人們添加了列並將其刪除。

有沒有一種方法,我可以適應下面的代碼從每個CSV

foreach($fileinfos as $pathname => $fileinfo) { 
    if (!$fileinfo->isFile()) continue; 
     if(substr($pathname,-3) == 'csv'){ 

      $file = fopen($pathname, "r"); 
      while ($line = fgetcsv($file,0,'^','¬')){ 
       echo substr($pathname,56) .' '.$numcols.'<br>';   
      } 
      fclose($file); 
     } 
} 

UPDATE選擇特定的列名:

這是我接受的列

Array 
(
    [0] => Date Raised 
    [1] => QA phase 
    [2] => Item ID 
    [3] => Screen Number 
    [4] => Reason 
    [5] => Matches originals? 
    [6] => Issue/Comments 
    [7] => Raise with Client? 
    [8] => Raised By 
    [9] => Status 
    [10] => TP/AS Status Initials 
    [11] => TP/AS Status date 
    [12] => TP/AS Status Comment 
    [13] => Retested by 
    [14] => Retested date 
    [15] => Retested Comment 
) 

這裏的數組是我的一系列禮品

Array 
(
    [0] => Date Raised 
    [1] => QA phase 
    [2] => Item ID 
    [3] => Screen Number 
    [4] => exam 
    [5] => Reason 
    [6] => Matches originals? 
    [7] => Issue/Comments 
    [8] => Raise with Client? 
    [9] => Raised By 
    [10] => Status 
    [11] => TP/AS Status Initials 
    [12] => TP/AS Status date 
    [13] => TP/AS Status Comment 
    [14] => dd Comments 
    [15] => PM Comments 
    [16] => Retested by 
    [17] => Retested date 
    [18] => Retested Comment 
) 

數組結合dosnt工作。

+3

是有第一條線確定th e列名?您可以閱讀第一行並記住列名,以在後面的所有行上創建一個數組,列名將用作此數組中的鍵 –

+0

第一行包含列名稱 - 那麼您是說解析第一行然後從那裏建立一個數組,並使用鍵跳過某些列? – Rob

回答

3
$file = fopen($pathname, 'r'); 
$headers = fgetcsv($file, 0, '^', '¬'); 

while ($line = fgetcsv($file, 0, '^', '¬')) { 
    $line = array_combine($headers, $line); 

    var_dump($line); 
    // access specific fields using $line['columnName'] 
} 
+0

只有在中間沒有添加列的情況下,此功能纔有效 – Rob

+0

您是什麼意思?這個解決方案的具體問題是什麼? – deceze

+1

@Rob我認爲你必須拆分你的csv文件,併爲所有可用的模式創建單個文件。在中間添加一列是銷燬它們之後的行的模式。或者您必須在模式更改點重新讀取列名稱。 –

2

我會嘗試這樣的事:

$csv = array(); 
$columnnames = fgetcsv($fp, 1024); 
while (true == ($columns = fgetcsv($fp, 1024))) { 
    $row = array_combine($columnnames, $columns); 
    $csv[] = $row; 
} 

在一個CSV文件中像這樣

id,name,email 
1,benjamin,[email protected] 
2,rob,[email protected] 

$csv變量應該是這樣的:

1 => array(
    'id' => 1, 
    'name' => 'benjamin', 
    'email' => '[email protected]' 
) 
... 
相關問題