php - 是否可以循环 $request->hasFile() 函数而不获取重复数据?
问题描述
我需要将$request->hasFile()
函数作为更新模块的一部分进行循环;
foreach ($answers as $a) {
$ansid = 0;
$ansid = $a['id'];
$ans['quiz_content'] = $data['quiz_content_'.$a['id']];
$ans['quiz_is_answer'] = 0;
if ($data['radio-group8'] == "radio-group8_".$a['id']) {
$ans['quiz_is_answer'] = 1;
}
if ($request->hasFile('quiz_img_'.$ansid) && $data['quiz_content_'.$ansid] == null && !empty($data['quiz_img_'.$ansid])) {
$project_image = $request->file('quiz_img_'.$ansid);
$filename = $ansid.'answer'.time().'.'.$project_image->getClientOriginalExtension();
$destinationPath = public_path('/uploads/elearning/answers');
$project_image->move($destinationPath, $filename);
$ans['quiz_image_name'] = $filename;
$ans['quiz_content_type'] = 2;
} elseif ($request->hasFile('quiz_img_'.$ansid) && $data['quiz_content_'.$ansid] != null && !empty($data['quiz_img_'.$ansid])) {
$project_image = $request->file('quiz_img_'.$ansid);
$filename = $ansid.'answer'.time().'.'.$project_image->getClientOriginalExtension();
$destinationPath = public_path('/uploads/elearning/answers');
$project_image->move($destinationPath, $filename);
$ans['quiz_content'] = $data['quiz_content_'.$ansid];
$ans['quiz_image_name'] = $filename;
$ans['quiz_content_type'] = 3;
}
QuizOption::where('id', $ansid)->update($ans);
}
但是,当我更新我的测验选项时,假设我有三个选项,a、b 和 c。如果我在 a、b 和 c 上设置图像,将获得相同的图像和相同的内容类型。如果我在 b 上设置图像,c 将获得与 b 相同的图像和内容类型。我知道问题出在if($request->hasFile())
条件上。但是我该如何编码,以便每个选项 a、b 和 c 都有唯一的答案和图片?
解决方案
您遇到的问题实际上与您$ans
在循环中设置变量的方式有关,而不是与$request->hasFile()
调用有关。因为您永远不会重置内部数据$ans
- 仅设置某些索引 - 在未来循环中不匹配的条件期间的任何数据集都不会更改。
这是问题的简化示例(在 3v4l.org 上查看结果):
$data = array();
for ($i = 0; $i < 5; $i++) {
$data['id'] = $i;
if ($i === 2) {
$data['foobar'] = $i;
}
var_dump($data);
}
当if
条件通过时$i = 2
,它会foobar
在数组上设置索引。未来的循环都不会更改该索引或重置$data
数组。
我建议$ans = [];
在循环的顶部放置或类似的重置,这样每个人都会获得仅与其答案相关的新数据。
推荐阅读
- dynamics-crm - Microsoft 365 API:将联系人附加到活动响应时出现问题
- javascript - 根据软件版本跳过 Coffeescript 测试
- version-control - 如何组织和共享仅用于 DevOps 和自动化目的的人工制品?
- android - java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: 无法合并 dex || 安卓
- excel - 跨工作表复制公式范围
- c# - 在 KENDO Grid 中的 DATE 列字段上选择 FILTER(为 NULL 或为空)时
- csv - 从 CSV UNIX SH 中修剪顶部和底部行
- javascript - 使用谷歌脚本创建折线图 - 谷歌表作为数据源
- admin-on-rest - TypeError:翻译不是函数
- kubernetes - 试图了解法兰绒与法兰绒吊舱的用法