вставка данных CSV-файла в массив (PHP) - PullRequest
2 голосов
/ 03 мая 2011

Я пытаюсь вставить данные из загруженного файла в массив одного измерения.

Файл таков, что в строке есть один номер студента, например:

392232,
392231,
и т. Д.

это наиболееобщий способ, который я нашел в Интернете:

while (($line = fgetcsv($file, 25, ',')) !== FALSE) {
        //$line is an array of the csv elements
        print_r($line);
        }

Однако, насколько я понимаю, это создаст массив ($line) для каждой строки.Это не то, что я хочу.

, что в стороне, я попробовал это, чтобы увидеть, работает ли он, и мой код не распечатывает массив после использования ftgetcsv ().Файл успешно загружается.

вот мой код:

    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);
}

Во-первых, может кто-нибудь, очевидно, понять, почему не сработает, по крайней мере, распечатать их как отдельныемассивы данных (каждая строка).

Во-вторых, возможно ли установить его так, чтобы он создавал массив 1d всех строк в файле?

Большое спасибо,

Ответы [ 4 ]

2 голосов
/ 03 мая 2011

Вопрос 1 из-за того, что

print_r($_FILES['csv_file']);
$file = fopen('$file_path', 'r');

должно быть:

$file = fopen($file_path, 'r');

, а для вопроса 2 проверьте array_push

1 голос
/ 03 мая 2011

Вот некоторые общие комментарии к вашему коду:

  1. Вы неверно передаете путь к файлу в функцию fopen(). Переменная не должна быть заключена в одинарные кавычки.
  2. Поскольку вы удаляете CSV-файл после его обработки, его перемещение не требуется. Просто используйте $_FILES['csv_file']['tmp_name'] в качестве пути к файлу.
  3. Поскольку в вашем CSV-файле имеется только одна запись на строку, просто получите доступ к первому элементу массива, который возвращается из fgetcsv(): $numbers[] = $line[0];
1 голос
/ 03 мая 2011

Согласно PHP.net $ строка должна возвращаться как массив. "возвращает массив, содержащий прочитанные поля." Но если вы уверены, что он содержит только один номер студента, вы можете использовать $ line [0], чтобы получить значение в первой строке (игнорируя ",")

1 голос
/ 03 мая 2011

1-й вопрос:

Эта строка фактически попытается открыть файл с именем '$ file_path', потому что вы используете одинарные кавычки (поэтому он не расширяется до значения переменной).Вы можете просто удалить кавычки.

$file = fopen('$file_path', 'r');

$file теряет значение после этого.

2-й вопрос:

Если все, что вы хотитеdo - преобразовать файл в массив по строкам, вместо которых можно использовать одну из них:
file () - получить весь файл в одномерный массив строк файла (ближайший к тому, что вы хотите)
fgets () - получить строку для каждой строки за вызов;продолжайте вызывать его до тех пор, пока он не вернет false, чтобы получить каждую строку по одной за раз
file_get_contents () - получить весь файл в строку и обработать, как вам нравится

...