将csv文件数据插入数组(PHP)

时间:2011-05-03 17:50:36

标签: php file fgetcsv

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

该文件是这样的,就像这样一行学生编号:

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 个答案:

答案 0 :(得分:2)

问题1是因为

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

应该是:

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

对于问题2,请查看array_push

答案 1 :(得分:1)

第一个问题:

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

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

$file在此之后为空。

第二个问题:

如果您只想按行将文件转换为数组,则可以使用以下方法之一:
file() - 将整个文件放入文件的一行数组(最接近您想要的内容)
fgets() - 每次调用获得一个字符串;继续调用它,直到它返回false以一次获得每一行为止 file_get_contents() - 将整个文件放入字符串并按您喜欢的方式进行处理

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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