1

重複の可能性:
PHP と fgetcsv 関数を使用して CSV ファイルから配列を作成する方法

コンマ区切り値の複数行を含むファイルがあります。ファイルのサンプルは次のとおりです。

1359739665,511251515,115151515,start,1277771750,,2215812581258,31.55.115.12,0,0 1359739665,511251515,115151515,restore,1277771750,,2215812581258,31.55.115.12,0,0 1359739665,511251515,115151515,restore,1277771750, ,2215812581258,31.55.115.12,0,0 1359739665,511251515,115151515,終わり,1277771750,,2215812581258,31.55.115.12,0,0

基本的に、各行を反復処理する必要があります。現時点では、これは私のコードです:

$file = "log.txt";
$contents = file_get_contents($file);
$fields = explode(',', $contents);

foreach ($fields as $row)
    {
       echo $row;
    }

これは、ファイル全体を出力する場合にうまく機能します。しかし、私の質問は、一度に 1 行ずつ反復する方法です。各行は基本的にカンマなしで終了しますが、強制的に改行する方法がわかりません。私がやりたいことはこれです(コードが間違っていても):

foreach ($fields as $row)  //need $row to equal each row of the log
  {
      echo $row[0];  // will output 1359739665
      echo $row[1];  // will output 511251515
      etc...
  }

ありがとうございました!

4

5 に答える 5

4

CSV データを読み取るには、str_getcsv()またはのいずれかを使用する必要があります。fgetcsv()

使用例fgetcsv():

if (($handle = fopen("log.txt", "r")) !== FALSE) {
    while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
        echo $row[0] . "\n"; // Will output  data contained in the first column
    }
    fclose($handle);
}

使用例str_getcsv():

$file = "log.txt";
$contents = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$csvRows = array_map('str_getcsv', $contents);

foreach($csvRows as $row) {
    echo $row[0] . "\n"; // Will output  data contained in the first column
}

を使用explode()して CSV データを手動で解析すると、CSV フィールドの値にカンマが含まれている可能性がある場合、または CSV ファイルのファイル末尾が一貫していない場合に問題が発生する可能性があります。上記の特殊な関数は、この特定のタスクに合わせて調整されているため、使用するのが最善です。

于 2013-02-05T02:52:19.643 に答える
1

file_get_contents単に使用する代わりにfile

$array_of_contents = file($file, FILE_IGNORE_NEW_LINES);

それが完了したら、配列を反復処理して、ファイルの個々の「列」を次のように取得できますstr_getcsv

foreach (file($file, FILE_IGNORE_NEW_LINES) as $line) {
    foreach (str_getcsv($file) as $fields) {
        echo $fields[0];
    }
}
于 2013-02-05T02:51:59.450 に答える
0

これを試して :

foreach(file('my.csv') as $line) {
    $record = str_getcsv($line, ',');
    var_dump($record);
}

この関数file()は、ファイルの1行ごとに配列を返します。ファイルの行を反復処理するのに非常に便利です。次に、foreachループ内で、各行を1つのレコードに分解できます。

Andrew Mooreのおかげで、str_getcsv()代わりにこの関数を使用することをお勧めしますexplode()

于 2013-02-05T02:53:24.800 に答える
0

.txt ファイルの行数を数え、foreach() で 1 行ずつ取得し、行を分解する

于 2013-02-05T02:51:42.737 に答える
0

改行で分解

$fields = explode("\n", $contents);
于 2013-02-05T02:52:06.043 に答える