Laravel 5.4:如何遍历判断带编号命名的选中复选框
如何循环判断编号式复选框的选中状态
嘿,这个场景我做项目时也碰到过,给你几个实用的解决思路,你可以根据实际情况选:
方法一:已知最大编号时直接循环遍历
如果你提前知道复选框的最大编号(比如最多有10个),直接循环遍历每个编号对应的参数就行:
// 设置你实际的最大编号 $maxDocNumber = 10; $selectedDocIds = []; for ($i = 1; $i <= $maxDocNumber; $i++) { $paramKey = "typedoc_{$i}"; // 复选框选中时才会提交参数,所以用has()判断存在性 if ($request->has($paramKey)) { // 把选中的编号存起来,或者直接执行业务逻辑 $selectedDocIds[] = $i; // 如需获取复选框的值:$docValue = $request->input($paramKey); } } // $selectedDocIds里就是所有被选中的复选框编号
方法二:未知最大编号时遍历所有请求参数
如果不确定复选框数量,或者编号不连续,那就遍历请求里的所有参数,筛选出符合命名规则的:
$selectedDocIds = []; // 遍历请求中的所有参数键值对 foreach ($request->all() as $paramKey => $paramValue) { // 用正则匹配"typedoc_数字"的格式 if (preg_match('/^typedoc_(\d+)$/', $paramKey, $matches)) { // 提取出编号部分 $docId = $matches[1]; $selectedDocIds[] = $docId; // 这里可以直接处理该编号对应的业务逻辑 } }
方法三:优化表单命名(更推荐的优雅写法)
其实还有个省心的办法——把复选框的name改成数组形式,提交后直接就能拿到所有选中的编号,不用折腾循环匹配:
前端表单修改:
把每个复选框的name属性改成typedoc[],同时给每个复选框设置value为对应编号,比如:
<input type="checkbox" name="typedoc[]" value="1" /> 文档1 <input type="checkbox" name="typedoc[]" value="2" /> 文档2 <input type="checkbox" name="typedoc[]" value="3" /> 文档3
控制器处理:
提交后直接从请求里获取这个数组即可:
// 第二个参数[]是默认值,防止没有选中时返回null $selectedDocIds = $request->input('typedoc', []); // 直接遍历处理选中的编号 foreach ($selectedDocIds as $docId) { // 执行你的业务逻辑,比如关联文档、更新状态等 }
这个方法代码最简洁,后期维护也方便,我个人更推荐这种写法~
内容的提问来源于stack exchange,提问作者user3370273
相关产品推荐
相关产品推荐

