Bonjour, je me doute que c'est une demande peu commune.
Pour faire simple j'étais en train de faire des tests sur la fonction fgetcsv(), pour l'intégrer par la suite dans mon projet. Et par curiosité j'ai voulu la mettre dans un for, et à ma grande surprise ça à fonctionné mais je ne comprends pas du tout comment .
Mon CSV comporte 4 lignes et que je mette $i=0 ou $i=6 (par exemple), ça me scannera quand même les 4 lignes de mon CSV. En bref j'aimerais bien comprendre comment mon for fonctionne, si quelqu'un à la patience de m'expliquer je serai preneur, merci d'avance.
Merci, j'ai bien compris comment fonctionne fgetcsv, mais ce que je n'ai pas compris c'est comment elle peut fonctionner dans un for comme je l'ai fait ci-dessus. Surtout que je n'ai vu personne utilisée un fgetcsv dans un for en regardant rapidement sur internet, en général il est utilisé dans while comme ceci :
C'est juste un énorme coup de bol que ça fonctionne d'une certaine façon parce que ta condition est fausse et n'a aucun sens pour commencer : on ne compare pas des fraises à des choux.
fgetcsv renvoie un tableau avec les données de la ligne sinon FALSE
Or un tableau est toujours plus grand qu'autre chose qu'un tableau :
Ce qui rend la condition toujours vraie si fgetcsv renvoie un tableau si tu la compares à un entier et qu'importe l'opérateur de comparaison (<(=) comme >(=))
Par contre, quand tu arrives en fin de fichier, elle renvoie FALSE (soit 0) qui ne sera jamais strictement supérieure à $i vu qu'elle débute à 0.
> Mon CSV comporte 4 lignes
Ce n'est pas pour autant qu'une boucle for est appropriée. Si demain il n'y en a que 3 ou 6, ta boucle est fausse. Tant que tu veux parcourir l'intégralité du CSV, c'est une boucle while qu'il te faut. for conviendrait si tu voulais lire au plus (parce qu'on ne fait jamais confiance au client pour commencer) 4 lignes et avais écrit :
for ($i = 0; $i < 4 && ($getData = fgetcsv($file, 10000, ',')); $i++)
PS : == true est implicite, il n'est pas utile de l'écrire
C'est bien ce que je me disais, j'ai eu de la chance, cependant j'avais remplacé mon while par le for afin d'avoir une variable qui s'incrémente (et que je cherchais une solution plus propre que de mettre une variable dans le while). Mais du coup est-ce que comme ça c'est syntaxement correcte (ça fonctionne en tout cas) ?
Oui là où je voulais en venir c'est quand il y a plus de ligne tu tombes dans le false donc le for se termine car la condition n'est plus valide mais julp à très bien détaillé.
Ca dépend quel est le but de ton incrément. Si c'est uniquement pour connaître le numéro de la ligne que tu es en train de parser, oui (le != false n'est pas plus utile que le == true).
Oui, c'est pour connaitre le n° de la ligne parser et aussi le nombre de ligne traiter. Et oui du coup je préfère le for au while , merci pour tes explications en tout cas !
Incompréhension fgetcsv() dans un for
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli