将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()得到每行一个 - 让整个文件转换成字符串和处理,你喜欢
答
根据到PHP.net $行必须返回数组。 “返回包含读取字段的数组。“ 但如果你确定这是只包含一个学号可以使用$行[0]拿到第一线值(忽略”,“)
答
这里是你的代码一些一般性的评论:
- 您传递文件路径进入
fopen()
函数不正确。变量不应该用单引号包围。 - 既然你正在处理之后删除CSV文件,移动是不必要的。只需使用
$_FILES['csv_file']['tmp_name']
为路径到文件 - 由于只有一个条目每行在您的CSV文件中,只需访问从
fgetcsv()
返回的阵列的第一个元素:$numbers[] = $line[0];
正是我刚才输入的内容。 – Wiseguy 2011-05-03 18:04:07