Codeigniter 4编辑页多选下拉框如何用in_array实现默认选中
问题根源
你当前获取的$listbrands是二维数组,每个元素为包含group_id、brand_id字段的关联数组,直接用in_array($group['id'], $listbrands)判断时,是拿分组id和整个二维数组的子元素做对比,永远不会匹配成功,所以选中状态不生效。
解决方案
第一步:控制器层处理选中的分组id为一维数组
修改edit方法,先从关联数据中提取所有关联的group_id转为一维数组再传给视图:
public function edit($id) { // 查询当前品牌关联的分组数据 $relatedGroups = $this->listbrands->where('brand_id', $id)->findAll(); // 提取所有group_id为一维数组 $selectedGroupIds = array_column($relatedGroups, 'group_id'); $data = [ 'brand' => $this->brands->find($id), 'groups' => $this->groups->findAll(), 'selectedGroupIds' => $selectedGroupIds, ]; return view('brands/edit', $data); }
第二步:视图层修改选中判断逻辑
把原来判断的数组替换成控制器传过来的一维id数组即可:
<div class="form-group"> <?= form_label('Group Type:', 'group_id') ?> <select class=" form-control select2" id="group_id" name="group_id[]" multiple> <?php foreach ($groups as $group) : ?> <option <?= in_array($group['id'], $selectedGroupIds) ? 'selected' : '' ?> value="<?= $group['id'] ?>"><?= $group['name'] ?></option> <?php endforeach; ?> </select> </div>
补充说明:如果存在数字类型不匹配导致判断失效的情况,可以给in_array加第三个参数true开启严格匹配,或者提前统一转换id的格式为字符串/整型即可。
内容的提问来源于stack exchange,提问作者Othsout
相关产品推荐
相关产品推荐

