列表拖拽排序是一個很常見的功能,但是后端接口如何處理卻是一個令人糾結(jié)的問題
如何實現(xiàn)才能達到效率最高呢?
先分析一個場景,假如有一個頁面有十條數(shù)據(jù),所謂的拖拽就是在這十條數(shù)據(jù)來來回回的拖,但是每次拖動都會影響到其他數(shù)據(jù)例如把最后一條拖到最前面,那么后面九條就自動往后移,反之也是,嗯~~~
先想象一下,排序號是固定的,就好像有十把椅子,每個椅子都是固定在那里的,移動的是上面的人,這樣就不會影響到其他頁面的數(shù)據(jù)了而且每個人換的也是之前其他人的桌椅號碼,這樣也不用去想到底要加多少才能排在哪里。
接口設(shè)計:
//$ids 這十條數(shù)據(jù)的id集合,逗號隔開的字符串
//$oldIndex 原始位置,從0開始算
//$newIndex 要拖動的位置
function dragSort($ids,$oldIndex,$newIndex)
{
//保證查找出來的數(shù)據(jù)跟前臺提交的順序一致,這里要order by field
//id 主鍵 sort 排序值
$sql = "select id,sort from 表名字 where id in ($ids) order by field(id, " . $ids . ") ";
$list = "這里省略,就是去數(shù)據(jù)庫找嘛";
//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);
//重新設(shè)置排序
$set = [];
for ($i = 0; $i count($idArr); $i++) {
$set[$i]['id'] = $idArr[$i];
$set[$i]['sort'] = $sortArr[$i];
}
//保存到數(shù)據(jù)庫省略
}
總結(jié)
以上所述是小編給大家介紹的php接口實現(xiàn)拖拽排序功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
您可能感興趣的文章:- PHP實現(xiàn)Google plus的好友拖拽分組效果
- Js+php實現(xiàn)異步拖拽上傳文件