You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:15:43