将csv文件数据插入到一个数组中(PHP)

问题描述:

我试图从上传的文件中将数据插入到单维数组中。将csv文件数据插入到一个数组中(PHP)

的文件是这样的,有一个学生数,像这样一行:

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

首先,任何人都可以很明显的看出为什么它wouldnt工作,至少把它们打印数据的单独阵列(每行)。

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

非常感谢,

问题1是因为

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

应该是:

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

和问题2,检查出array_push

1问:

这条线实际上会尝试打开一个名为“$ FILE_PATH”因为您使用单引号文件(所以它不会扩展到价值变量)。你可以删除引号。

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

$file在此之后为空。

第二个问题:

如果你想要做的是转换一个文件到一个数组的线,你可以使用以下内容之一:
file() - 让整个文件到文件的行一维数组(最接近你想要的)
fgets() - 每个调用每行获得一个字符串;保持通话,直到返回false同时
file_get_contents()得到每行一个 - 让整个文件转换成字符串和处理,你喜欢

+0

正是我刚才输入的内容。 – Wiseguy 2011-05-03 18:04:07

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

这里是你的代码一些一般性的评论:

  1. 您传递文件路径进入fopen()函数不正确。变量不应该用单引号包围。
  2. 既然你正在处理之后删除CSV文件,移动是不必要的。只需使用$_FILES['csv_file']['tmp_name']为路径到文件
  3. 由于只有一个条目每行在您的CSV文件中,只需访问从fgetcsv()返回的阵列的第一个元素:$numbers[] = $line[0];