我正在尝试将上传文件中的数据插入到单维数组中。
该文件是这样的,就像这样一行学生编号:
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数组?
非常感谢,
答案 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)
以下是对您的代码的一些一般性评论:
fopen()
函数。该变量不应该用单引号括起来。$_FILES['csv_file']['tmp_name']
作为文件的路径。fgetcsv()
返回的数组的第一个元素:$numbers[] = $line[0];