php接口实现拖拽排序功能


Posted in PHP onApril 23, 2018

列表拖拽排序是一个很常见的功能,但是后端接口如何处理却是一个令人纠结的问题

如何实现才能达到效率最高呢?

先分析一个场景,假如有一个页面有十条数据,所谓的拖拽就是在这十条数据来来回回的拖,但是每次拖动都会影响到其他数据例如把最后一条拖到最前面,那么后面九条就自动往后移,反之也是,嗯~~~

先想象一下,排序号是固定的,就好像有十把椅子,每个椅子都是固定在那里的,移动的是上面的人,这样就不会影响到其他页面的数据了而且每个人换的也是之前其他人的桌椅号码,这样也不用去想到底要加多少才能排在哪里。

接口设计:

//$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接口实现拖拽排序功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP系统流量分析的程序
Oct 09 PHP
推荐一篇入门级的Class文章
Mar 19 PHP
php IP及IP段进行访问限制的代码
Dec 17 PHP
PHP 图片上传代码
Sep 13 PHP
PHP5.3与5.5废弃与过期函数整理汇总
Jul 10 PHP
PHP中Closure类的使用方法及详解
Oct 09 PHP
深入分析PHP优化及注意事项
Jul 04 PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 PHP
php array_keys 返回数组的键名
Oct 25 PHP
PHP获取数组中指定的一列实例
Dec 27 PHP
PHP实现的函数重载功能示例
Aug 03 PHP
Laravel中Kafka的使用详解
Mar 24 PHP
PHP基于SPL实现的迭代器模式示例
Apr 22 #PHP
PHP生成推广海报的方法分享
Apr 22 #PHP
PHP排序算法之归并排序(Merging Sort)实例详解
Apr 21 #PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 #PHP
Laravel模型间关系设置分表的方法示例
Apr 21 #PHP
PHP排序算法之基数排序(Radix Sort)实例详解
Apr 21 #PHP
PHP排序算法之堆排序(Heap Sort)实例详解
Apr 21 #PHP
You might like
用PHP和ACCESS写聊天室(五)
2006/10/09 PHP
php+mysql 实现身份验证代码
2010/03/24 PHP
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
php array_walk() 数组函数
2011/07/12 PHP
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
PHP的几个常用加密函数
2016/02/03 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
用js实现计算加载页面所用的时间
2010/04/02 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
jquery mobile开发常见问题分析
2016/01/21 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
如何使用vuejs实现更好的Form validation?
2017/04/07 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
react native 仿微信聊天室实例代码
2019/09/17 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
node读写Excel操作实例分析
2019/11/06 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
[01:30:55]VG vs Mineski Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
pip install urllib2不能安装的解决方法
2018/06/12 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
飞利浦美国官网:Philips美国
2020/02/28 全球购物
机电专业大学生求职信
2013/10/04 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python
react 路由Link配置详解
2021/11/11 Javascript
详细介绍Java中的CyclicBarrier
2022/04/13 Java/Android