php接口實現拖拽排序功能

來源:http://news.mkq.online/ 作者:牛站新聞

列表拖拽排序是一個很常見的功能,但是後端接口如何處理卻是一個令人糾結的問題

如何實現才能達到效率最高呢?

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

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

接口設計:
view source
print
?
01
//$ids 這十條數據的id集合,逗號隔開的字符串
02
//$oldIndex 原始位置,從0開始算
03
//$newIndex 要拖動的位置
04
function dragSort($ids,$oldIndex,$newIndex)
05
{
06
//保證查找出來的數據跟前臺提交的順序一致,這裏要order by field
07
//id 主鍵 sort 排序值
08
$sql = "select id,sort from 表名字 where id in ($ids) order by field(id, " . $ids . ") ";
09
$list = "這裏省略,就是去數據庫找嘛";
10
//id集合
11
$idArr = [];
12
//排序集合
13
$sortArr = [];
14
foreach ($list as $item) {
15
$idArr[] = $item['id'];
16
$sortArr[] = $item['sort'];
17
}
18
//記錄要拖動的id
19
$oldValue = $idArr[$oldIndex];
20
//刪除這個要拖動的id
21
unset($idArr[$oldIndex]);
22
//插入新的位置,並自動移位
23
array_splice($idArr, $newIndex, 0, $oldValue);
24
//重新設置排序
25
$set = [];
26
for ($i = 0; $i < count($idArr); $i++) {
27
$set[$i]['id'] = $idArr[$i];
28
$set[$i]['sort'] = $sortArr[$i];
29
}
30
//保存到數據庫省略
31
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章