如何从没有预期的CSV列标题的csv文件中获取值

时间:2018-02-18 07:08:54

标签: php laravel-5 fgetcsv maatwebsite-excel

用户准备CSV文件以进行上传。唯一强制性和预期的CSV列标题为titledescription

但是,用户可以选择其他个人CSV列标题。也就是说,除了两个强制性titledescription之外,用户还可以选择添加另一个remarks time e.t.c。

我想在所有其他列中完全获取额外数据(如果存在)并将其保存为一个数据库字段data中的数组。

但是,我想不出一种获取额外字段数据的方法。见下文

if($request->hasFile('import_file')){
    $path = $request->file('import_file')->getRealPath();
    $data = Excel::load($path, function($reader) {})->get();
    if(!empty($data) && $data->count()){
        foreach ($data->toArray() as $key => $value) {
            if(!empty($value)){
                foreach ($value as $v) {        
                    $insert[] = ['title' => $v['title'], 'description' => $v['description'], ['data' => $v['xxxxxxxxxxxx'], ];
                }
            }
        }
        if(!empty($insert)){
            Item::insert($insert);
            return back()->with('success','Insert Record successfully.');
        }
    }
}
return back()->with('error','Please Check your file, Something is wrong there.');

如何获取可选的额外数据并保存?

任何?

2 个答案:

答案 0 :(得分:1)

您可以将其存储在JSON中......

foreach ($value as $v) {   
    $data = json_encode($v);     
    $insert[] = ['title' => $v['title'], 'description' => $v['description'], 'data' => $data ];
}

这包括标题和说明,您可以创建一个没有该数据的新数组,然后根据需要存储它。

答案 1 :(得分:1)

我认为你的要求是从数组中取出所有列,除了标题和描述,并合并/ jsonify它们并存储它。如果这是你想要的

$insert = []; //just to be safe declare $insert here 
foreach ($data->toArray() as $key => $value) {
  if(!empty($value)){
     foreach ($value as $v) {        
        $insert[] = [
           'title' => $v['title'], 
           'description' => $v['description'], 
           'data' => array_except($v,['title', 'description']),//maybe you want to jsonify or merge data 
        ];
     }
  }
}
//DB insertion logic

您可以阅读array_except()辅助函数here

相关问题