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