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,

Était-ce utile?

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:

  1. Vous ne transmettez pas correctement le chemin du fichier dans la fonction fopen().La variable ne doit pas être entourée de guillemets simples.
  2. 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.
  3. 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];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top