这次我要知道如何获取整个csv文件数据并将其打印出来 这是我的功能,请帮助前进
public function import(Request $request){
$upload =$request->file('upload-file');
$filepath= $upload->getRealPath();
$file=fopen($filepath, 'r');
$header=fgetcsv($file);
dd($header);
die;
}
我希望标题不应该来到这里除了标题之外应该打印整个数据 它的foreach循环
foreach($users as $user) {
}
这是我得到的标题
array:13 [▼
0 => "Account Name"
1 => "Group"
2 => "Host"
3 => "Username"
4 => "Password"
5 => "Port"
]
答案 0 :(得分:1)
fgetcsv
返回它正在查看的行并将“指针”移动到下一行。如果要将整个CSV文件加载到数组中,则需要遍历文件:
<?php
$data = [];
if (($handle = fopen("test.csv", "r")) !== FALSE) {
$i = 0; // Define a counter that tells us which row we're looking at
while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
// Only capture rows that are greater than 0, i.e. we skip the first row (Headers)
if ($i > 0) {
$data[] = $row;
}
$i++;
}
fclose($handle);
}
var_dump($data);
为每一行数据创建用户应该很简单:
foreach ($data as $item) {
User::create($item);
}
关于验证上传的文件是否为CSV文件,您可以使用Laravel's validation rules,特别是有关mime的文件。例如:
'file' => 'file|mimes:csv'
如果您想在函数中进行一些验证,可以使用从UploadedFile
获得的$request->file('...');
实例上的一些方法,特别是您可以使用$upload->getClientOriginalExtension()
来获取上传文件的文件扩展名,或者您可以使用$upload->getClientMimeType()
获取文件的mime类型,如果是CSV,则应为text/csv
:
if ($upload->getClientOriginalExtension() != 'csv') {
// Handle your validation error, probably throw an exception
}
if ($upload->getClientMimeType() != 'text/csv') {
// Handle error
}