2011-01-06 40 views
1

我需要獲得第一列值的計數。這些ID可能或可能不存在於我收到的任何給定的.csv文件中。所以我需要通過查看第一列的.csv文件進行循環,如果它不存在,或者將它添加到保存數組($ PWSs),或者如果我已經添加它,則增加此保存數組中的計數。我需要得到csv列中的值(分組)數量

我第一循環使用fgetcsv()..這個工程的裂解成文件:

$PWSs = array(); 

$handle2 = fopen ($uploadfileandpath,"r"); 
while ($field2array = fgetcsv ($handle2, 130000, ",")) 
{ 
    // Here is where I would add value or increment $PWSs array 
    while (?) 
    { 
     if ($field2array[0] != ?) 
     { 
      // Add or increment 
     } 
    } 
} 

下面是實際數據。第一列有公共水系統的ID。我需要數它們。

"00513","08/13/2009","090834311A","R","4","OR1000x6","N","N","E",,1,".73","COLILERT" 
"00513","08/13/2009","090834312A","R","39","OR1000x6","N","N","E",,1,".35","COLILERT" 
"00154","08/13/2009","090835401A","R","300 Falls Road","OR100016","N","N","E",,1,".10","COLILERT" 
"95343","08/13/2009","090835601A","R","Room 1 Sink","OR1000x6","N","N","E",,1,,"COLILERT" 
"94585","08/14/2009","090837701A","R","Kitchen","OR1000x6","N","N","E",,1,,"COLILERT" 
"94704","08/14/2009","090837801A","R","Outside Tap","OR1000x6","N","N","E",,1,,"COLILERT" 
"01430","08/14/2009","090838201A","R","100 Deer Park Ln OT","OR1000x6","N","N","E",,1,,"COLILERT" 
"00625","08/14/2009","090839001A","R","Dano and N Rose","OR100016","N","N","E",,1,".35","COLILERT" 
"00405","08/17/2009","090840301A","R","Westmont Drive","OR100016","N","N","E",,1,".28","COLILERT" 
"01031","08/17/2009","090840401A","R","Unit 2 Faucet","OR100016","N","N","E",,1,,"COLILERT" 
"00625","08/17/2009","090840601A","R","Luman Road","OR1000x6","N","N","E",,1,".35","COLILERT" 
"00513","08/17/2009","090841001A","R","40","OR1000x6","N","N","E",,1,".18","COLILERT" 
"00513","08/17/2009","090841002A","R","10","OR1000x6","N","N","E",,1,".16","COLILERT" 

回答

2
$fh = fopen('file.csv', 'rb'); 

$PWS = array(); 
while($row = fgetcsv($fh)) { 
    $PWS[$row[0]]++; 
} 

基本上,它會在PWS使用填充第一列值作爲鍵,並隨着它們的增加而增加。此後,鑑於上述您的樣本CSV,你會最終

$PWS = array(
    '00513' => 4 
    '00154' => 1 
    '95343' => 1 
    '94585' => 1 
etc... 
); 
+0

感謝Marc B.此代碼感謝您的工作,但我也收到一個未定義的索引: $ fh = fopen($ uploadfileandpath,「r」); $ PWSs = array(); while($ row = fgetcsv($ fh,130000,「,」)){ $ PWSs [$ row [0]] ++; //該行爲每個新值返回一個未定義的索引(它仍然將它們加起來) } foreach($ PWSs as $ key => $ value){ print「$ key:$ value
」; } fclose($ fh); – JustJohn 2011-01-06 18:48:28

+0

我上面的評論不太可讀。下面是一行得到「未定義索引」錯誤。 (我無法更改錯誤報告級別):$ PWSs [$ row [0]] ++; – JustJohn 2011-01-06 18:51:53

+0

好吧,我放棄了努力變得聰明,我很聰明。我把它放在頁面的頂部,以避免未定義的索引通知:error_reporting(E_ALL^E_NOTICE); – JustJohn 2011-01-06 23:05:38

0

你只需要一個循環。您的外部while循環在它到達eof時將停止,因爲fgetcsv()將返回FALSE。

然後只是測試列爲NULL或「」一個空字符串。如果列在給定數組中不存在,則應使用isset()以確保它在條件中第一個存在。指出這一點DQ感謝:)

編輯;

1
function get_pws() 
{ 
    $PWSs = array(); 

    $handle2 = fopen ($uploadfileandpath,"r"); 
    while ($field2array = fgetcsv ($handle2, 130000, ",")) 
    { 
     if(!in_array($field2array[0], $PWSs)) 
     { 
      array_push($PWSs, array('key'=>$field2array[0], 'count'=>1)); 
     } 
     else 
     { 
      foreach($PWSs as &$PWS) 
      { 
       if($PWS['key'] == $field2array[0]) 
       { 
        ++$PWS['count']; 
       } 
      } 
     } 
    } 

    return $PWSs; 
} 

我還沒有實際運行和測試這個腳本,所以希望它的工作原理,它是你在找什麼。同樣,我沒有測試過,所以希望它仍然有效(不與PHP安裝ATM的機器上)(如果它擺在首位的工作):P

+1

澄清,這個統計有多少不同的唯一ID有很多行不只是如何包含的ID。 – dqhendricks 2011-01-06 01:42:24

相關問題