PHP如何获取同名多输入字段值并按组生成多维数组
问题原因
PHP解析表单提交的数组字段时,若多个同名多选字段都用[]作为后缀,所有选中值会被合并为同一个一维数组,所以无法得到分层的子数组结构。
解决方法
1. 修改View层的select标签name属性
给每个多选框的name显式指定第一维的索引,PHP就能区分不同多选框的选中值,分别存为独立子数组:
<!-- 第一个多选框,指定第一维索引为0,同步修改id避免重复 --> <label for="dependent_benefit_0"><?php echo "Benefit Name" ?></label> <select name="dependent_benefit[0][]" id="dependent_benefit_0" class="form-control" multiple="multiple"> <?php foreach ($benefitlist as $list) { ?> <option value="<?php echo $list->benefit_id ?>"><?php echo $list->benefit_name ?></option> <?php } ?> </select> <!-- 第二个多选框,指定第一维索引为1 --> <label for="dependent_benefit_1"><?php echo "Benefit Name" ?></label> <select name="dependent_benefit[1][]" id="dependent_benefit_1" class="form-control" multiple="multiple"> <?php foreach ($benefitlist as $list) { ?> <option value="<?php echo $list->benefit_id ?>"><?php echo $list->benefit_name ?></option> <?php } ?> </select>
如果多选框是动态循环生成的,直接用循环的下标变量作为第一维索引即可,比如name="dependent_benefit[<?php echo $i; ?>][]",$i从0开始递增即可。
2. 控制器代码无需修改
原来的取值逻辑可以直接拿到预期的二维数组结构:
$dependent_benefit = $this->input->post('dependent_benefit', true);
此时第一个多选框的选中值会存放在$dependent_benefit[0]子数组中,第二个多选框的选中值会存放在$dependent_benefit[1]子数组中,和你预期的结构完全一致。
内容的提问来源于stack exchange,提问作者Fakhir Shahwar
相关产品推荐
相关产品推荐

