2011-01-06 8 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]] ++; //このラインはすべての新しい値の定義されていないインデックスを返す(それはまだそれらを追加する) $ { } fclose($ fh); – JustJohn

+0

私の上記のコメントはあまりにも読めるものではありません。ここでは、 "未定義インデックス"エラーを取得する1行です。 (私はエラー報告レベルを変更できません):$ PWSs [$ row [0]] ++; – JustJohn

+0

私は賢明にしようとしましたが、私は賢かったです。私は、これをページの上部に置いて、未定義索引通知を避けます:error_reporting(E_ALL^E_NOTICE); – JustJohn

0

は1つだけです whileループを必要としています。外側のwhileループは、fgetcsv()がFALSEを返すため、eofに当たると停止します。

次に、カラムがNULLか空文字列かをテストします。列が指定された配列に存在しない場合は、isset()を使用して、条件に最初に存在することを確認する必要があります。

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; 
} 

私は実際にはそううまくいけばそれが動作し、それはあなたが探しているものだし、実行し、このスクリプトをテストしていません。)

編集:おかげで、DQをそのを指摘するために。繰り返しますが、私は(ATMを設置PHPでないマシン上で)それをテストしていませんが、(それが最初の場所で働いていた場合)ので、うまくいけば、それはまだ動作します:P

+1

で終わるだろう、これはIDが含まれているだけでどのように多くの行、そこではありませんどのように多くの異なったユニークなIDをカウントします。 – dqhendricks

関連する問題