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脚本的10个技巧(3)
Oct 09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――上篇)
Dec 13 PHP
利用discuz自带通行证整合dedecms的方法以及文件下载
Mar 06 PHP
快速开发一个PHP扩展图文教程
Dec 12 PHP
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
Jun 14 PHP
php设计模式之单例模式使用示例
Jan 20 PHP
C# WinForm中实现快捷键自定义设置实例
Jan 23 PHP
PHP页面跳转操作实例分析(header方法)
Sep 28 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
PHP swoole和redis异步任务实现方法分析
Aug 12 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
Oct 15 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 cookie 登录验证示例代码
2009/03/16 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
PHP如何将XML转成数组
2016/04/04 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
jquery中获取元素的几种方式小结
2011/07/05 Javascript
css结合js制作下拉菜单示例代码
2014/02/27 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
Webpack的dll功能使用
2018/06/28 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
Element输入框带历史查询记录的实现示例
2019/01/15 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
医学实习生自我鉴定
2013/12/12 职场文书
公交公司毕业生求职信
2014/02/15 职场文书
技能竞赛活动方案
2014/02/21 职场文书
感恩老师演讲稿600字
2014/08/28 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
2014年行政执法工作总结
2014/12/11 职场文书
学风建设主题班会
2015/08/17 职场文书
英语导游欢迎词
2015/09/30 职场文书
前端实现滑动按钮AJAX与后端交互的示例代码
2022/02/24 Javascript
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸