列表拖拽排序是一個很常見的功能,但是后端接口如何處理卻是一個令人糾結的問題
如何實現才能達到效率最高呢?
先分析一個場景,假如有一個頁面有十條數據,所謂的拖拽就是在這十條數據來來回回的拖,但是每次拖動都會影響到其他數據例如把最后一條拖到最前面,那么后面九條就自動往后移,反之也是,嗯~~~
先想象一下,排序號是固定的,就好像有十把椅子,每個椅子都是固定在那里的,移動的是上面的人,這樣就不會影響到其他頁面的數據了而且每個人換的也是之前其他人的桌椅號碼,這樣也不用去想到底要加多少才能排在哪里。
接口設計:
//$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]; } //保存到數據庫省略}
總結
以上所述是小編給大家介紹的php接口實現拖拽排序功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!
新聞熱點
疑難解答
圖片精選