Laravel和PHP:不能轻易获得数组项,那是为什么?

问题描述 投票:0回答:1

问题简介

我已经编写了一个类来导入特定的CSV文件。此类处理除移动和读取导入的文件以外的所有内容。这是通过使用Laravel中的de File Facade在控制器中完成的。下面的描述仅描述了一个数组,但是我使用了更多的数组,并且在类本身中也遇到了同样的问题。问题是,每次我尝试使用字符串作为键值来访问数组中的项目时,应用程序都会崩溃并出现一些模糊的错误。我在一个单独的,非Laravel的php文件中对此进行了测试,但没有出现错误。仅在我的Laravel应用中。奇怪的是,我通过以下方式测试了数组:

a)使用array_key_exists-未找到键(我同时使用了'和“)b)使用array_keys-这次我从数组中获得所有键c)例如:$ report ['student_number']-不起作用,我在这里收到错误d)例如:$ report [array_keys($ report)[0]]-此方法e)在Vanilla PHP中,我做同样的事情,在那儿我没有任何错误。

真实代码

在控制器中,我通过以下方式处理上传:

    $uploaded_file = $request->file('uploadfile');
    $uploaded_file->move(storage_path().'/files', $uploaded_file->getClientOriginalName());
    $import_file = storage_path().'/files/'.$uploaded_file->getClientOriginalName();

    if(File::exists($import_file) && File::isReadable($import_file)) {
        $raw_file_data = File::get($import_file);

        $import = ImportStudents::getInstance();

        $import_result = $import->import($raw_file_data);
    }

在导入类中,我拥有私有财产:

    private $report = [];

我通过以下方式用数据填充数组:

    $this->report[$student_number][] = [
       'field' => $field,
       'db_field' => 'student_number',
       'new_value' => $value,
       'old_value' => $student_number,
       'action' => 'updated'
    ];

在类中,我最终将这个数组返回给控制器:

    return $this->report;

在控制器中,我将此数组传递给视图:

    return view('home.import_report')->with('report', $import_result);

在刀片文件中,我使用以下代码:

    @foreach($report as $report_row)
       <td>{{ $report_row['field'] }}</td>
       <td>{{ $report_row['db_field'] }}</td>
       <td>{{ $report_row['new_value'] }}</td>
       <td>{{ $report_row['old_value'] }}</td>
       <td>{{ $report_row['action'] }}</td>
    @endforeach

错误

“ C:\ Windows \ Temp \ php57CD.tmp”文件不存在或不存在可读。

备注

以上只是我得到错误的代码的一部分。如前所述,我在类代码中也遇到了相同的错误。

规格

Laravel:6.xPHP:7.3.10

问题

我在这里俯瞰什么?有什么问题吗?

php arrays laravel
1个回答
0
投票

显示报告的上述问题的解决方案,我怎么会忘记,我需要一个额外的foreach循环。

旧代码

@foreach($report as $report_row)
       <td>{{ $report_row['field'] }}</td>
       <td>{{ $report_row['db_field'] }}</td>
       <td>{{ $report_row['new_value'] }}</td>
       <td>{{ $report_row['old_value'] }}</td>
       <td>{{ $report_row['action'] }}</td>
    @endforeach

答案在我自己的代码中已经很明显了:-(,此代码:

$this->report[$student_number][] = [
       'field' => $field,
       'db_field' => 'student_number',
       'new_value' => $value,
       'old_value' => $student_number,
       'action' => 'updated'
    ];

新代码(解决方案)

@forelse($report as $student_number => $report_row)
                    <tr><td colspan="6" style="color: white; background-color: darkblue; padding: 0;"><h5>{{ $student_number  }} - {{ $report_row[0]['name'] }}</h5></td></tr>
                    @foreach($report_row as $actions)
                        <tr>
                            <td></td>
                            <td>{{ $actions['field'] }}</td>
                            <td>{{ $actions['db_field'] }}</td>
                            <td>{{ $actions['new_value'] }}</td>
                            <td>{{ $actions['old_value'] }}</td>
                            <td>{{ $actions['action'] }}</td>
                        </tr>
                    @endforeach
                @empty
                    <tr><td colspan="6">No changes</td></tr>
                @endforelse

但是此问题仍然存在于数组中

a)使用array_key_exists-找不到键(我同时使用了'和')b)使用array_keys-这次我从数组中获取所有键c)例如:$ report ['student_number']-不起作用,我在这里收到一个错误d)例如:$ report [array_keys($ report)[0]]-可行e)在Vanilla PHP中,我做同样的事情,在那儿我没有任何错误。

什么不起作用

$student->first_name = $imported_row['Roepnaam'];

但是键'Roepnaam'确实存在于数组中。使用array_keys($ imported_row)我可以看到该密钥存在。

正在做什么

$student->first_name = $imported_row[array_keys($imported_row)[1]];

这让我感到困惑!

© www.soinside.com 2019 - 2024. All rights reserved.