6
votes

Premier élément dans une boucle de temps?

J'écris un script PHP qui importe un CSV et insère dans une table, mais j'ai besoin d'obtenir la première ligne afin que je puisse avoir les noms de champs..ELERE est mon CSV

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


0 commentaires

3 Réponses :


3
votes

Avant votre numéro de temps, exécutez simplement la fonction FgeCSV un seul moment et stockez les en-têtes de champ.


1 commentaires

+1 Bien sûr, un simple ! == false doit être mis en œuvre pour cela, au cas où la première ligne n'est pas au format de la colonne CSV. Avec cela en place, la boucle tandis que peut également être complètement ignorée si le fichier n'est pas csv.



17
votes

cela fonctionnerait-il pour vous?

$row = 1;

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

    ++$row;
}


1 commentaires

Utilisez Markdown pour formater vos messages afin que votre code soit plus lisible (je l'ai fait pour vous). Cette page montre comment.



2
votes

Les méthodes de DeepSat ou de Mattmoon9 vont bien fonctionner. Voici ce que La réponse de Mattmoon9 ressemblerait à structurée en code (aussi Basé sur mon commentaire 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
}


0 commentaires