微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel 导入器给出未定义的索引异常

如何解决Laravel 导入器给出未定义的索引异常

我正在创建一个带有 GUI 的 Laravel 导入器。 所以,我有一个“ParseImport”功能

public function parseImport(CsvImportRequest $request)
    {

        $path = $request->file('csv_file')->getRealPath();

        if ($request->has('header')) {
            $data = Excel::toArray([],request()->file('csv_file'))[0];
        } else {
            $data = array_map('str_getcsv',file($path));
        }

        if (count($data) > 0) {
            if ($request->has('header')) {
                $csv_header_fields = [];
                foreach ($data[0] as $key => $value) {
                    $csv_header_fields[] = $key;
                }
            }
            $csv_data = array_slice($data,2);

            $csv_data_file = CsvData::create([
                'csv_filename' => $request->file('csv_file')->getClientOriginalName(),'csv_header' => $request->has('header'),'csv_data' => json_encode($data)
            ]);
        } else {
            return redirect()->back();
        }

        return view('import_fields',compact( 'csv_header_fields','csv_data','csv_data_file'));

    }

还有一个“ProcessImport”:

public function processImport(Request $request)
    {
        $data = CsvData::find($request->csv_data_file_id);
        $csv_data = json_decode($data->csv_data,true);
        foreach ($csv_data as $row) {
            $item = new Item();
            var_dump($item);
            foreach (config('app.db_fields') as $index => $field) {
                if ($data->csv_header) {
                    $item->$field = $row[$request->fields[$field]];
                } else {
                    $item->$field = $row[$request->fields[$index]];
                }
            }
            $item->save();
        }

        return view('import_success');
    }

上传我的 csv 文件时:

enter image description here

并在我的 GUI 中选择匹配的字段,从我的 import_fields.blade.PHP 中:

<form class="form-horizontal" method="POST" action="{{ route('import_process') }}">
    {{ csrf_field() }}
    <input type="hidden" name="csv_data_file_id" value="{{ $csv_data_file->id }}" />

    <table class="table">
        @if (isset($csv_header_fields))
            <tr>
                @foreach ($csv_header_fields as $csv_header_field)
                    <th>{{ $csv_header_field }}</th>
                @endforeach
            </tr>
        @endif
        @foreach ($csv_data as $row)
            <tr>
                @foreach ($row as $key => $value)
                    <td>{{ $value }}</td>
                @endforeach
            </tr>
        @endforeach
        <tr>
            @foreach ($csv_data[0] as $key => $value)
                <td>
                    <select name="fields[{{ $key }}]">
                        @foreach (config('app.db_fields') as $db_field)
                            <option value="{{ (\Request::has('header')) ? $db_field : $loop->index }}"
                                    @if ($key === $db_field) selected @endif>{{ $db_field }}</option>
                        @endforeach
                    </select>
                </td>
            @endforeach
        </tr>
    </table>

    <button type="submit" class="btn btn-primary">
        Import Data
    </button>
</form>

到我的数据库表 csv_data 中,我在其中存储 csv 文件和数据。它工作正常,数据按原样存储:

enter image description here

但是当尝试将文件导入我的项目表时:

enter image description here

我收到错误:“未定义索引:标题” 除了以下例外:

enter image description here

Var_dump($item) 给了我以下内容

{ ["fillable"]=> array(13) { 
[0]=> string(5) "title" 
[1]=> string(11) "item_number" 
[2]=> string(3) "ean" 
[3]=> string(6) "active" 
[4]=> string(5) "price" 
[5]=> string(10) "cost_price" 
[6]=> string(11) "offer_price" 
[7]=> string(6) "teaser" 
[8]=> string(11) "description" 
[9]=> string(9) "inventory" 
[10]=> string(5) "image" 
[11]=> string(8) "brand_id" 
[12]=> string(11) "category_id" } 

你们能看到我遗漏了什么吗?我似乎无法理解它。

解决方法

你的方法太复杂了。我在谷歌上搜索了“php csv to associative array”并找到了这段代码,看起来很清楚。

$csv = array_map('str_getcsv',file($file)); 
array_walk($csv,function(&$a) use ($csv) { 
   $a = array_combine($csv[0],$a); 
}); 
array_shift($csv);

https://medium.com/@czmole/php-convert-csv-to-associative-arrays-b82b9b4d4412

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?