2011-10-06 8 views
5

csvファイルのカラム数を調べようとしています。PHP fgetcsv() - カラム数を調べる

私のスクリプトは、最初の列のみを利用していますが、私はやや目立たないようです。私は、列数を制限する変数を配置したい。 (私はミスを犯すと、列を追加、または偶数列を見逃す可能性があるため)

<?php 
$allowedColNum=5; 
$batchcount=0; 
$file = fopen($file_name, "r"); 
while ($line = fgetcsv($file)){ 
/* I want to stop the loop if the $allowedColNum is not correct */     
    $col = $line[0]; 
    echo $batchcount++.". ".$col."\n"; 
} 

fclose($file); 
?> 

私はそれは私が届かないものを簡単に簡単なものの一つだと確信しています。

答えて

13

fgetcsv()はCSVファイルから1行を表す配列を返したので、わかりましたらcount($line)が必要です。配列のcount()は、ソース列の数です。

while ($line = fgetcsv($file)){ 

    // count($line) is the number of columns 
    $numcols = count($line); 

    // Bail out of the loop if columns are incorrect 
    if ($numcols != $allowedColNum) { 
    break; 
    } 
    $col = $line[0]; 
    echo $batchcount++.". ".$col."\n"; 
} 
+0

私は見る!私は、個々の行を取得した後でvsの前に$ numcolsを見つけるのと混同していたと思う。多分、特定の行が同じファイル内の他の列番号と異なる列番号を持っているので、それがうまくいかないと思います。しかし、私は正直に言えば、それは私がファイルで新しいので、それを前提にしています。 – coffeemonitor

0

テストされていませんが、動作するはずです。 はfseek関数を実行します(0)の代わりに、配列内の値を保存する作業をテストし、::

$allowedColNum=5; 
$batchcount=0; 
$file = fopen($file_name, "r"); 
$totCols=0; 
while ($line = fgetcsv($file)) 
if(count($line) > $totCols) $totCols = count($line); 
fseek($file, 0); 
while ($line = fgetcsv($file)) 
{ 
    //.... 
} 
fclose($file); 

編集はるかに高速になります

0

マイケルBerkowski答え作業私のために罰金が、私の場合、また、fgetcsv()関数呼び出しでcsv区切りを指定する必要がありました。コンマ "、"デフォルトではセミコロンに変更します ";"このように:

while($ line = fgetcsv($ file、0、 ';')){

関連する問題