2

我正在尝试将上传文件中的数据插入一维数组。

该文件是这样的,一行有一个学生编号,如下所示:

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

首先,任何人都可以清楚地看到为什么至少将它们打印为单独的数据数组(每一行)是行不通的。

其次,是否可以设置它以便创建文件中所有行的一维数组?

非常感谢,

4

4 回答 4

2

问题1是因为

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

应该:

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

对于问题 2,请查看array_push

于 2011-05-03T18:03:32.220 回答
1

第一个问题:

这一行实际上会尝试打开一个名为 '$file_path' 的文件,因为您使用的是单引号(因此它不会扩展为变量的值)。您可以删除引号。

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

$file在此之后为空。

第二个问题:

如果您只想按行将文件转换为数组,则可以使用其中之一:
file() - 将整个文件转换为文件行的一维数组(最接近您想要的)
fgets() -每次调用每行获取一个字符串;继续调用它,直到它返回 false 以一次获取每一行
file_get_contents() - 将整个文件放入一个字符串并根据需要进行处理

于 2011-05-03T18:01:09.620 回答
1

根据 PHP.net $line 必须以数组形式返回。“返回一个包含读取字段的数组。” 但是如果你确定它只包含一个学生号,你可以使用 $line[0] 来获取第一行的值(忽略“,”)

于 2011-05-03T18:10:50.080 回答
1

以下是对您的代码的一些一般性评论:

  1. 您将文件路径fopen()错误地传递给函数。变量不应用单引号括起来。
  2. 由于您在处理完 CSV 文件后将其删除,因此无需移动它。只需$_FILES['csv_file']['tmp_name']用作文件的路径。
  3. 由于 CSV 文件中每行只有一个条目,因此只需访问从返回的数组的第一个元素fgetcsv()$numbers[] = $line[0];
于 2011-05-03T18:12:41.000 回答