如何获取整个csv文件和打印(laravel 5.3)

时间:2016-11-24 09:07:29

标签: php laravel csv import

这次我要知道如何获取整个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"
]

1 个答案:

答案 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
}