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

How to get values from a csv file without expected CSV column headers

用户准备要上传的 CSV 文件。唯一强制和预期的 CSV 列 headers 是 titledescription

但是,用户可以选择其他个人 CSV 列 headers。也就是说,除了 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.');

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

有人吗?

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

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

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

我认为您的要求是从数组中取出所有列,除了标题和描述以及 merge/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