PHP编辑页面下拉框报错:in_array参数类型不匹配问题求助
问题修复方案
1. 修复in_array()类型错误
从print_r($category_data)的输出可知,category字段的值是整数0,但你在edit.php中用json_decode($category_data['category'])解析后得到的还是整数,而in_array()要求第二个参数必须是数组,这直接导致了报错。
代码修改(edit.php)
替换原来的$main_category_data初始化代码,确保它始终是数组格式:
<?php // 统一处理category数据,确保返回数组 $category_value = $category_data['category']; if (is_numeric($category_value)) { // 如果是单个ID(如0),转成单元素数组 $main_category_data = [$category_value]; } else { // 如果是JSON字符串,解码为数组;解码失败则返回空数组 $main_category_data = json_decode($category_value, true) ?: []; } ?>
2. 修复下拉框默认选中不显示的问题
你提到不加<option value=""></option>就无法显示原本选中的分类,核心原因是当前子分类的category值为0,但下拉框中没有对应value="0"的选项,只有空值选项能通过PHP松散比较匹配0。
方案选择(二选一)
方案A:适配数据库存储的0值
在下拉框中添加value="0"的选项,明确对应"无分类"逻辑:
<select class="form-control select_group" id="category" name="category[]"> <option value="0">无分类</option> <?php foreach ($category as $k => $v): ?> <option value="<?php echo $v['id'] ?>" <?php if(in_array($v['id'], $main_category_data)) { echo 'selected="selected"'; } ?> ><?php echo $v['name'] ?></option> <?php endforeach ?> </select>
方案B:统一用空字符串表示无分类
修改edit.php中的数据处理逻辑,将0转换为空字符串,同时保留空选项:
<?php $category_value = $category_data['category']; if (is_numeric($category_value) && $category_value == 0) { $main_category_data = ['']; } else { $main_category_data = json_decode($category_value, true) ?: []; } ?>
然后保留空选项:
<select class="form-control select_group" id="category" name="category[]"> <option value=""></option> <?php foreach ($category as $k => $v): ?> <!-- 原有选项代码 --> <?php endforeach ?> </select>
额外优化建议
- 统一存储逻辑:
create.php中下拉框的name是category[](数组格式),但数据库中存的是单个整数,建议存储时将数组转为JSON字符串(如json_encode($_POST['category'])),避免类型混乱。 - 使用
json_decode($str, true):始终添加第二个参数true,确保返回数组而非对象,避免后续类型错误。
内容的提问来源于stack exchange,提问作者wloleo
相关产品推荐
相关产品推荐

