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 DataGrid 实现代码
Aug 12 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
Sep 29 PHP
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
PHP程序员最常犯的11个MySQL错误小结
Nov 20 PHP
fgetcvs在linux的问题
Jan 15 PHP
写出高质量的PHP程序
Feb 04 PHP
PHP中extract()函数的妙用分析
Jul 11 PHP
PHP实现对文本数据库的常用操作方法实例演示
Jul 04 PHP
自定义session存储机制避免会话保持问题
Oct 08 PHP
thinkphp3.x中display方法及show方法的用法实例
May 19 PHP
Laravel 加载第三方类库的方法
Apr 20 PHP
php优化查询foreach代码实例讲解
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
《一拳超人》埼玉一拳下去,他们存在了800年毫无意义!
2020/03/02 日漫
php 使用post,get的一种简洁方式
2010/04/25 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
Thinkphp集成抖音SDK的实现方法
2020/04/28 PHP
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
解析js如何获取css样式
2016/12/11 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
解决layui数据表格table的横向滚动条显示问题
2019/09/04 Javascript
ant design vue导航菜单与路由配置操作
2020/10/28 Javascript
python实现apahce网站日志分析示例
2014/04/02 Python
Python中for循环控制语句用法实例
2015/06/02 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
美国宠物商店:Wag.com
2016/10/25 全球购物
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
期末总结的个人自我评价
2013/11/02 职场文书
高一地理教学反思
2014/01/18 职场文书
小学生成长感言
2014/01/30 职场文书
广告设计应届生求职信
2014/03/01 职场文书
交通事故代理词范文
2015/05/23 职场文书
Mysql使用全文索引(FullText index)的实例代码
2022/04/03 MySQL
css3 选择器
2022/05/11 HTML / CSS