Vérifiez l'en-tête en csv et ignorez l'en-tête en php
-
12-12-2019 - |
Question
Je voudrais vérifier si le fichier csv contient un en-tête et ignorer l'en-tête.
Je dois vérifier si la première colonne n'est pas un caractère
le fichier csv a le format :avgTemperature, minTemperature, maxTemperature
$f = fopen("./uploads/" .$filename, "r"); $string = "avgTemperature"; if (fgetcsv($f)==$string){ // read the first line and ignore it fgets($f); }
La solution
Aller de votre commentaire et de l'idée que les données réelles sont des températures (c'est-à-dire des données numériques), si vous avez des en-têtes, ils seront des chaînes de texte et non des chiffres.Par conséquent, vous pouvez faire quelque chose comme ceci:
$f = fopen("./uploads/" .$filename, "r");
if(!($data = fgetcsv($f))) {
return; //most likely empty file
}
if(!is_numeric($data[0])) {
//this is your header line - skip it - and read the next line
$data = fgetcsv($f);
}
while($data) {
//process a line of data
...
//and read the next line
$data = fgetcsv($f);
}
edit: Une version alternative de la dernière boucle ressemblerait à ceci:
do {
//process a line of data
...
}
while ($data = fgetcsv($f));
Autres conseils
Je suppose que votre code complet utilise une boucle (while
ou for
).
En tant que tel, vous disposez de quelques options.
- Sautez simplement la première ligne toujours.
- Utilisez la logique pour tester le ligne d'en-tête puis sautez.
De toute façon, continue
est la pièce maîtresse.
Pseudo-code PHP :
while (…) {
if ($row == $header_row) {
continue;
}
// data rows
}
MISE À JOUR
La logique permettant de déterminer si la première ligne est une ligne d'en-tête semble être une meilleure solution dans votre cas.Vous pouvez utiliser ce qui suit pour tester cela.
if ($row[0] == 'avgTemperature') {
// header row
}
Note: Cela suppose que la première colonne de données est Température moyenne et son en-tête est Température moyenne.Ajustez si nécessaire.