Laravel中如何遍历提取指定命名规则的表单多选字段值
提取方法
你可以通过正则匹配字段名规则的方式筛出目标字段,不需要提前预知拼接的ID具体数值,实现逻辑如下:
- 遍历所有请求传入的参数键名,用正则匹配
values_+数字+[]格式的字段,自动过滤掉其他无关表单项 - 对匹配到的字段,提取键名中拼接的ID,再读取该多选字段对应的用户选中值(多选字段提交的值本身就是选中选项组成的数组),按ID映射存储结果即可
代码示例
你用的name="values_x[]"是PHP系的参数命名规范,下面给两种最常用的PHP场景实现:
Laravel等框架场景
$selectedResult = []; // 获取所有请求参数的键名 $paramKeys = array_keys($request->all()); foreach ($paramKeys as $key) { // 正则匹配目标字段,同时捕获拼接的ID if (preg_match('/^values_(\d+)\[\]$/', $key, $matchRes)) { $fieldId = $matchRes[1]; // 读取该多选框的选中值,未选中时默认返回空数组 $selectedResult[$fieldId] = $request->input($key, []); } }
执行后$selectedResult的结构就是[ID => 选中选项数组],比如ID为1的下拉选了1和2,就会有$selectedResult[1] = [1,2]。
原生PHP场景
原生PHP会自动把name带[]的字段解析为数组,参数键名会自动去掉末尾的[],匹配逻辑微调即可:
$selectedResult = []; foreach ($_POST as $key => $val) { if (preg_match('/^values_(\d+)$/', $key, $matchRes)) { $fieldId = $matchRes[1]; $selectedResult[$fieldId] = $val; } }
如果你用的是其他语言/框架,核心逻辑完全一致:只要按字段名规则匹配筛出目标项,再读取对应值即可,正则可以根据框架的参数解析规则微调。
内容的提问来源于stack exchange,提问作者Shaun
相关产品推荐
相关产品推荐

