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

POST方法获取医生搜索结果后,如何在页面实现列表A-Z排序?

医生列表A-Z排序功能实现方案

下面提供两种可直接使用的实现方案,你可以根据实际场景选择:


方案1:后端PHP排序(数据量大时推荐,排序逻辑更稳定)

步骤1:开启SESSION支持

在页面PHP代码最顶部添加一行代码,开启SESSION用于缓存搜索结果:

<?php
session_start();
include 'models/doctors.class.php';
// 原有代码保持不变

步骤2:缓存原始搜索结果

在你获取到搜索结果$s的位置,添加代码将结果存入SESSION:

if(isset($_POST['submit'])){
    $s= $search->filterDoctors($_POST);
    // 新增两行缓存代码
    $_SESSION['doctor_search_result'] = $s;
    $_SESSION['doctor_search_params'] = $_POST;
}
// 新增排序参数判断逻辑
elseif(isset($_SESSION['doctor_search_result'])){
    $s = $_SESSION['doctor_search_result'];
}

// 新增A-Z排序逻辑
if(isset($_GET['sort']) && $_GET['sort'] == 'az'){
    usort($s, function($a, $b){
        // 按医生姓名字段升序排序
        return strcmp($a['full_name'], $b['full_name']);
    });
}

步骤3:修改排序按钮

把原页面的排序按钮修改为带参数的跳转链接:

<a href="?sort=az" class="btn btn-primary">Filter-A-Z</a>

方案2:前端JS排序(无刷新,用户体验更好,适合数据量较小的场景)

不需要修改PHP后端逻辑,直接改前端代码即可:

步骤1:给容器和卡片加标识

找到包裹所有医生卡片的容器,添加id:

<div class="container" id="doctorListContainer">

给每个医生卡片添加存储姓名的自定义属性:

<div class="therapistCardOne mx-2 popins-font my-2" data-name="<?php echo $row1['full_name'];?>">

步骤2:修改排序按钮

给排序按钮加点击事件标识:

<a href="javascript:;" class="btn btn-primary" id="sortAzBtn">Filter-A-Z</a>

步骤3:添加排序JS代码

在页面</body>标签之前添加如下JS代码:

<script>
$('#sortAzBtn').click(function(){
    // 获取所有医生卡片节点
    let doctorCards = $('#doctorListContainer > a').get();
    // 按姓名拼音/英文A-Z排序
    doctorCards.sort(function(cardA, cardB){
        let nameA = $(cardA).find('.therapistCardOne').data('name').toUpperCase();
        let nameB = $(cardB).find('.therapistCardOne').data('name').toUpperCase();
        return nameA.localeCompare(nameB);
    });
    // 把排序后的卡片重新插入页面
    $('#doctorListContainer').append(doctorCards);
});
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:27:03