insertion de données de fichier csv dans un tableau (PHP)
Question
J'essaie d'insérer les données d'un fichier téléchargé dans un tableau à une seule dimension.
Le fichier est tel qu'il y a un numéro d'étudiant par ligne comme ceci:
392232,
392231,
etc
c'est le moyen le plus courant que j'ai trouvé en ligne:
while (($line = fgetcsv($file, 25, ',')) !== FALSE) {
//$line is an array of the csv elements
print_r($line);
}
Cependant, d'après ce que je comprends, cela créera un tableau ($line
) pour chaque ligne.Ce n'est pas ce que je veux.
Cela mis à part, j'ai essayé ceci pour voir si cela fonctionnait et si mon code n'imprimait pas le tableau après avoir utilisé ftgetcsv ().Le téléchargement du fichier a réussi .
voici mon code:
if(isset($_FILES['csv_file']) && is_uploaded_file($_FILES['csv_file']['tmp_name'])){
//create file name
$file_path = "csv_files/" . $_FILES['csv_file']['name'];
//move uploaded file to upload dir
if (!move_uploaded_file($_FILES['csv_file']['tmp_name'], $file_path)) {
//error moving upload file
echo "Error moving uploaded file";
}
print_r($_FILES['csv_file']);
$file = fopen('$file_path', 'r');
while (($line = fgetcsv($file, 25, ',')) !== FALSE) {
//$line is an array of the csv elements
print_r($line);
}
//delete csv file
unlink($file_path);
}
Tout d'abord, est-ce que n'importe qui peut évidemment voir pourquoi cela ne fonctionnerait pas au moins de les imprimer sous forme de tableaux séparés de données (chaque ligne).
Deuxièmement, est-il possible de le définir de sorte qu'il crée un tableau 1d de toutes les lignes du fichier?
Merci beaucoup,
La solution
La question 1 est due à
print_r($_FILES['csv_file']);
$file = fopen('$file_path', 'r');
devrait être:
$file = fopen($file_path, 'r');
et pour la question 2, consultez array_push
Autres conseils
1ère question:
Cette ligne essaiera en fait d'ouvrir un fichier appelé '$ file_path' parce que vous utilisez des guillemets simples (donc il ne s'étend pas à la valeur de la variable).Vous pouvez simplement supprimer les guillemets.
$file = fopen('$file_path', 'r');
$file
est nul après cela.
2e question:
Si tout ce que vous voulez faire est de convertir un fichier en un tableau par lignes, vous pouvez utiliser l'un de ces éléments à la place:
file () - récupère le fichier entier dans un tableau 1D de lignes dufichier (le plus proche de ce que vous voulez)
fgets () - obtient une chaîne par ligne par appel;continuez d'appeler ceci jusqu'à ce qu'il renvoie false pour obtenir chaque ligne une par une
file_get_contents () - obtenir le fichier entier dans une chaîne et traitercomme tu veux
Selon PHP.net, $ line doit être renvoyé sous forme de tableau. "renvoie un tableau contenant les champs lus." Mais si vous êtes sûr qu'il ne contient qu'un seul numéro d'étudiant, vous pouvez utiliser $ line [0] pour obtenir la valeur de la première ligne (en ignorant le ",")
Voici quelques commentaires généraux sur votre code:
- Vous ne transmettez pas correctement le chemin du fichier dans la fonction
fopen()
.La variable ne doit pas être entourée de guillemets simples. - Puisque vous supprimez le fichier CSV après l'avoir traité, il est inutile de le déplacer.Utilisez simplement
$_FILES['csv_file']['tmp_name']
comme chemin vers le fichier. - Comme il n'y a qu'une seule entrée par ligne dans votre fichier CSV, accédez simplement au premier élément du tableau renvoyé par
fgetcsv()
:$numbers[] = $line[0];