2010-11-02 35 views
4

Je suis en train d'écrire un script PHP qui importe un csv et insère dans une table mais je dois obtenir la première ligne pour que je puisse avoir le names..here sur le terrain est mon csvPremier élément dans une boucle while?

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

Comme vous pouvez le voir La première rangée est le nom des champs dont j'ai besoin. voici ma boucle

$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"} 

Comment puis-je obtenir la première et les mettre dans les variables et continuer la boucle des données à l'aide de ces champs dans une instruction d'insertion

Répondre

12

Cela fonctionnerait-il pour vous?

$row = 1; 

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

    ++$row; 
} 
+1

Utilisez Markdown pour formater vos messages afin que votre code soit plus lisible (je l'ai fait pour vous). [Cette page montre comment.] (Http://stackoverflow.com/editing-help) – BoltClock

+0

@BoltClock - Merci encore! – zerodin

+0

merci pour le poste! – user3943543

3

Avant votre bloc while, exécutez la fgetcsv fonctionner une seule fois et stocker les en-têtes de champ.

+1

+1 Bien sûr, un simple '== vérification de false' devrait être mis en œuvre pour que juste au cas où le premier! La ligne n'est pas au format colonne CSV. Avec cela en place, la boucle while peut également être complètement ignorée si le fichier n'est pas CSV. – BoltClock

2

Soit deepsat est ou les méthodes de mattmoon9 fonctionnera bien. Voici ce que mattmoon9's answer ressemblerait structuré en code (également en fonction de mes commentaires sur la réponse):

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