0

PHP で CSV ファイルを解析して値を操作しようとしていますが、私のコードは CSV ファイルの最初の行からのデータしか返しません。

CSVファイルはこんな感じ

C,  QXM0039326, ,           X6, 2288314208
C,  QXP0039226, 7021130,    X6,     100013427

php は次のようになります。

if (($handle = fopen("easy.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",", "\n")) !== FALSE) 
    {
        // do something with the data here
        echo $data[0] . " - ". $data[1] . " - ". $data[2] . "</br>" ;
    }

    fclose($handle);
}

これにより、$data[0] などの期待される結果が生成されますが、csv の最初の行のみが生成されます。したがって、次のような出力結果が得られます。

C - QTM0039326 - 2288314208

これはまさに私が望む出力ですが、CSV のすべての行に対してです。

$data を次のように反復しようとしました

if (($handle = fopen("easy.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",", "\n")) !== FALSE) 
    {
        // do something with the data here
        foreach ($data as $row){
            echo $row[0] . " - ". $row[1] . " - ". $row[4] . "</br>" ;
    }   
    fclose($handle);
}

}

しかし、これは私に次のような本当に素晴らしい結果をもたらします(続きます):

C - - 
Q - T - 0
- - 
X - 6 - 
2 - 2 - 3

私が求めている結果を得るにはどうすればよいですか (つまり C - QTM0039326 - 2288314208 )、CSV のすべての行に対して?

4

2 に答える 2

2

ループ内でファイル ハンドルを閉じたので、次の反復では何もありません....

次のようになります。

if (($handle = fopen("easy.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",", "\n")) !== FALSE) 
    {
        // do something with the data here
        echo $data[0] . " - ". $data[1] . " - ". $data[2] . "</br>" ;
    }

    fclose($handle);
}
于 2013-03-14T04:32:20.813 に答える
1

この1行を変更してみてください。改行に問題がある可能性があります。

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
于 2013-03-14T04:58:29.867 に答える