6

csvをインポートしてテーブルに挿入するPHPスクリプトを書いていますが、フィールド名を取得できるように最初の行を取得する必要があります..ここに私のcsvがあります

id  artist          song           
11  NewBee          great stuff
10  anotherNewbee   even better   
6    NewArtist       New song

ご覧のとおり、最初の行は必要なフィールドの名前です。ここに私のループがあります

$handle = fopen('csvs/'.$_FILES["csv"]["name"], 'r');

while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
 print_r($data); 
 //do something with it but i need the first time around 


 array(3) { [0]=> string(2) "id" [1]=> string(6) "artist" [2]=> string(4) "song" } 
 array(3) { [0]=> string(2) "11" [1]=> string(6) "NewBee" [2]=> string(1) "great stuff" }  
 array(3) { [0]=> string(2) "10" [1]=> string(13) "anotherNewbee" [2]=> string(1) "even better"} 

最初のものを取得して変数に入れ、挿入ステートメントでそれらのフィールドを使用してデータのループを続行するにはどうすればよいですか

4

3 に答える 3

17

これはうまくいきますか?

$row = 1;

while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
    if($row == 1) {
        // do something
    }
    else
    {
        // do something
    }

    ++$row;
}
于 2010-11-02T02:25:01.030 に答える
3

while ブロックの前に、fgetcsv 関数を 1 回だけ実行し、フィールドの見出しを保存します。

于 2010-11-02T02:23:56.837 に答える
2

deepsatまたはmattmoon9のどちらの方法でも問題なく機能します。mattmoon9の回答は、コードで構造化されているように見えます(これも回答に対する私のコメントに基づいています)。

$handle = fopen('csvs/'.$_FILES["csv"]["name"], 'r');

if (($columns = fgetcsv($handle, 1000, ',')) !== false) {
    while (($data = fgetcsv($handle, 1000, ',')) !== false) {
        // Process data
    }

    // Insert into database using $columns as table column names
} else {
    // The file couldn't be parsed as CSV
}
于 2010-11-02T02:42:19.653 に答える