拉维公司;PHP:没有技巧就无法访问数组项,为什么? 问题导论

拉维公司;PHP:没有技巧就无法访问数组项,为什么? 问题导论,php,arrays,laravel,Php,Arrays,Laravel,我编写了一个类来导入特定的CSV文件。这个类处理除了移动和读取导入的文件之外的所有事情。这是在控制器中通过使用Laravel中的de File facade完成的。 下面的描述只描述了其中一个数组,但我使用了更多的数组,而且在类本身中我也遇到了同样的问题。问题是,每次我尝试使用字符串作为键值访问数组中的项目时,应用程序都会因一些模糊的错误而崩溃。我在一个单独的、非laravel的php文件中对此进行了测试,没有发现任何错误。它只在我的Laravel应用程序中。奇怪的是,我用以下方法测试了阵列:

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

a) 使用数组\u键\u存在-找不到键(我同时使用了“和”)
b) 使用数组\u键-这次我从数组中获取所有键
c) 例如:$report['student_number']-不起作用,我在这里得到一个错误
d) 例如:$report[array\u keys($report)[0]]-这很有效
e) 在vanilla PHP中,我也这样做,在那里我没有得到任何错误

真正的代码 在控制器中,我通过以下方式处理上传:

$upload_file=$request->file('uploadfile');
$uploaded_file->move(存储路径()./files',$uploaded_file->getClientOriginalName());
$import_file=storage_path()。/files/。$upload_file->getClientOriginalName();
如果(文件::存在($import_File)&&File::isReadable($import_File)){
$raw\u file\u data=file::get($import\u file);
$import=ImportStudents::getInstance();
$import\u result=$import->import($raw\u file\u data);
}
在导入类中,我有一个私有属性:

private$report=[];
我用以下方法填充数组中的数据:

$this->report[$student\u number][][
“字段”=>$field,
“db_字段”=>“学生编号”,
“新值”=>$value,
“旧值”=>$student\u编号,
“操作”=>“已更新”
];
在类中,我最终将此数组返回给控制器:

返回$this->报表;
在控制器中,我将此数组传递给视图:

返回视图('home.import_report')->带有('report',$import_result);
在blade文件中,我使用以下代码:

@foreach($report as$report\u行)
{{$report_行['field']}
{{$report_行['db_字段']}
{{$report_行['new_值']}
{{$report_行['old_value']}
{{$report_行['action']}
@endforeach
错误 “C:\Windows\Temp\php57CD.tmp”文件不存在或不存在 可读的

评论 以上只是我代码中出现错误的一部分。正如我前面提到的,我在类的代码中也遇到了同样的错误

规格 拉威尔:6.x PHP:7.3.10

问题:
我在这里忽略了什么?问题是什么?

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

旧代码
@foreach($report as$report\u行)
{{$report_行['field']}
{{$report_行['db_字段']}
{{$report_行['new_值']}
{{$report_行['old_value']}
{{$report_行['action']}
@endforeach
答案在我自己的代码中已经很明显了:-(,这个代码:

$this->report[$student\u number][][
“字段”=>$field,
“db_字段”=>“学生编号”,
“新值”=>$value,
“旧值”=>$student\u编号,
“操作”=>“已更新”
];
新代码(解决方案)
@forelse($report as$student\u number=>$report\u行)
{{$student_number}-{$report_行[0]['name']}
@foreach($report\u row as$actions)
{{$actions['field']}
{{$actions['db_field']}
{{$actions['new_value']}
{{$actions['old_value']}
{{$actions['action']}
@endforeach
@空的
不变
@endforelse
但是这个问题在数组中仍然存在 a) 使用数组\u键\u存在-找不到键(我同时使用了“和”)
b) 使用数组_键-这次我从数组中获取所有键
c) 例如:$report['student_number']-不起作用,我在这里得到一个错误
d) 例如:$report[array_keys($report)[0]]-这很有效
e) 在vanilla PHP中,我也这样做,在那里我没有得到任何错误

什么不起作用
$student->first_name=$imported_row['Roepnaam'];
但是“Roepnaam”键确实存在于数组中。
使用数组\u键($imported\u row)我可以看到键存在

什么在起作用
$student->first_name=$imported_row[array_key($imported_row)[1];

这让我很困惑

你真的把文件保存在任何地方了吗?看起来用户在请求中上传了一个文件,但这只是临时的(您可以从.tmp扩展名中看到)。您将需要使用存储/文件系统外观将其实际存储在某个位置。是的,文件将从临时文件夹移动到存储文件夹,并获取其原始名称。但是上面提到的问题已经解决了,因为这和我在课堂上遇到的问题不一样。显示报告的问题是(我太愚蠢了),我忘记了我需要一个额外的foreach循环。但是类中使用数组和使用键访问数组项的问题仍然存在。