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 相关文章推荐
Ha0k 0.3 PHP 网页木马修改版
Oct 11 PHP
PHP JSON格式数据交互实例代码详解
Jan 13 PHP
PHP中的按位与和按位或操作示例
Jan 27 PHP
关于php支持分块与断点续传文件下载功能代码
May 09 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
Jun 19 PHP
php生成随机数的三种方法
Sep 10 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
laravel自定义分页效果
Jul 23 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
Sep 30 PHP
Laravel框架实现即点即改功能的方法分析
Oct 31 PHP
解决Laravel使用验证时跳转到首页的问题
Nov 17 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学习笔记汇总
2014/10/05 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
PHP实现在线阅读PDF文件的方法
2015/06/23 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
2014/08/01 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
2016/01/05 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
关于Python数据结构中字典的心得
2017/12/04 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
如何通过命令行进入python
2020/07/06 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
Python排序函数的使用方法详解
2020/12/11 Python
海蓝之谜(LA MER)澳大利亚官方商城:全球高端奢华护肤品牌
2017/10/27 全球购物
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
腾讯公司的一个sql题
2013/01/22 面试题
简历上的自我评价
2014/02/03 职场文书
团干部培训班心得体会
2016/01/06 职场文书
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
2021/04/16 PHP