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

PHP循环生成多选列表时,如何自动选中指定ID的分类

解决方案

首先修正原代码里的一处错误:$xe = $querye->rowCount(); 中的$querye是未定义变量,应该改为$query->rowCount();。

接下来实现选中状态的逻辑,需要做以下几点修改:

  • 给listCategory函数添加参数,接收需要选中的分类ID数组
  • 输出<option>标签时,判断当前分类ID是否在目标数组中,若是则添加selected="selected"属性
  • 调用函数时传入$catIDs数组

修改后的完整代码如下:

<?php
$catIDs = array(4,7,18);

function listCategory($id = 0, $string = 0, $selectedIDs = []){
    global $sib;
    $query = $sib->prepare("select * from categories where subCatID=? and isActive=? order by toSort asc");
    $query->execute( array($id, 1) );
    $view = $query->fetchAll( PDO::FETCH_ASSOC );
    $xe = $query->rowCount(); // 修正未定义的$querye变量
    if ( $xe ) {
        foreach ($view as $row) {
            if ( $row["subCatID"] == 0 ) {
                echo '<optgroup label="' . $row["title"] . '">';
            } else {
                // 判断当前分类ID是否在选中数组中,生成selected属性
                $selected = in_array($row["categoryID"], $selectedIDs) ? ' selected="selected"' : '';
                echo '<option value="' . $row["categoryID"] . '"' . $selected . '>';
            }
            echo str_repeat( " - ", $string ) . $row["title"];

            // 递归调用时传递选中数组
            listCategory( $row["categoryID"], $string + 1, $selectedIDs );

            if ( $row["subCatID"] == 0 ) {
                echo '</optgroup>';
            } else {
                echo '</option>';
            }
        }
    } else { 
        return false; 
    }
 }

// 调用函数时传入需要选中的ID数组
listCategory( 0, 0, $catIDs );
?>

关键修改说明

  • 函数新增$selectedIDs参数,默认值为空数组,用来接收需要选中的分类ID集合
  • 输出option标签时,用in_array()判断当前ID是否在目标数组,动态添加selected属性
  • 递归调用时传递$selectedIDs,确保子分类也能正确判断选中状态
  • 修正了原代码中$querye的拼写错误

内容的提问来源于stack exchange,提问作者Halil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:25:32