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 strncasecmp字符串比较的小技巧
Jan 04 PHP
Linux下实现PHP多进程的方法分享
Aug 16 PHP
header导出Excel应用示例
Jan 24 PHP
destoon公司主页模板风格的添加方法
Jun 20 PHP
PHP实现的简单mock json脚本分享
Feb 10 PHP
php随机获取金山词霸每日一句的方法
Jul 09 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
php基于PDO实现功能强大的MYSQL封装类实例
Feb 27 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
thinkphp分页集成实例
Jul 24 PHP
详细解读php的命名空间(二)
Feb 21 PHP
php去除数组中为0的元素的实例分析
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
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
分享PHP守护进程类
2015/12/30 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
2016/07/14 PHP
php验证码生成器
2017/05/24 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
jquery 查找新建元素代码
2010/07/06 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
IE6浏览器中window.location.href无效的解决方法
2014/11/20 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
Node.js操作系统OS模块用法分析
2019/01/04 Javascript
vue实现分页栏效果
2019/06/28 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
2017/06/16 Python
python数字图像处理之高级滤波代码详解
2017/11/23 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
2019/05/23 Python
Python csv模块使用方法代码实例
2019/08/29 Python
python多线程并发及测试框架案例
2019/10/15 Python
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
直接有效的自我评价
2014/01/11 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
计算机专业自荐信
2015/03/05 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
公司车队管理制度
2015/08/04 职场文书