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
相关产品推荐
相关产品推荐

