php接口實現拖拽排序功能


列表拖拽排序是一個很常見的功能,但是后端接口如何處理卻是一個令人糾結的問題
如何實現才能達到效率最高呢

先分析一個場景,假如有一個頁面有十條數據,所謂的拖拽就是在這十條數據來來回回的拖,但是每次拖動都會影響到其他數據
例如把最后一條拖到最前面,那么后面九條就自動往后移,反之也是,嗯~~~

先想象一下,排序號是固定的,就好像有十把椅子,每個椅子都是固定在那里的,移動的是上面的人,這樣就不會影響到其他頁面的數據了
而且每個人換的也是之前其他人的桌椅號碼,這樣也不用去想到底要加多少才能排在哪里。

接口設計:

//$ids 這十條數據的id集合,逗號隔開的字符串
//$oldIndex 原始位置,從0開始算
//$newIndex 要拖動的位置
function dragSort($ids,$oldIndex,$newIndex)
{
    //保證查找出來的數據跟前台提交的順序一致,這里要order by field
    //id 主鍵 sort 排序值
    $sql =  "select id,sort from 表名字 where id in ($ids) order by field(id, " . $ids . ") ";
    $list =  "這里省略,就是去數據庫找嘛";
    //id集合
    $idArr   = [];
    //排序集合
    $sortArr = [];
    foreach ($list as $item) {
        $idArr[]   = $item['id'];
        $sortArr[] = $item['sort'];
    }
    //記錄要拖動的id
    $oldValue = $idArr[$oldIndex];
    //刪除這個要拖動的id
    unset($idArr[$oldIndex]);
    //插入新的位置,並自動移位
    array_splice($idArr, $newIndex, 0, $oldValue);
    //重新設置排序
    $set = [];
    for ($i = 0; $i < count($idArr); $i++) {
         $set[$i]['id']   = $idArr[$i];
         $set[$i]['sort'] = $sortArr[$i];
     }
    //保存到數據庫省略
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM