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&amp;mysql(四)
Oct 09 PHP
php MsSql server时遇到的中文编码问题
Jun 11 PHP
php网站来路获取代码(针对搜索引擎)
Jun 08 PHP
php获取淘宝分类id示例
Jan 16 PHP
php命名空间学习详解
Feb 27 PHP
CI框架装载器Loader.php源码分析
Nov 04 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
thinkPHP实现表单自动验证
Dec 24 PHP
php购物车实现方法
Jan 03 PHP
php日期操作技巧小结
Jun 25 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
Sep 22 PHP
ThinkPHP 5.x远程命令执行漏洞复现
Sep 23 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分页函数
2006/07/08 PHP
用文本文件制作留言板提示(上)
2006/10/09 PHP
用ODBC的分页显示
2006/10/09 PHP
PHP中去除换行解决办法小结(PHP_EOL)
2011/11/27 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
Javascript !!的作用
2008/12/04 Javascript
Javascript 自定义类型方法小结
2010/03/02 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
JavaScript对象学习经验整理
2013/10/12 Javascript
IE6已终止操作问题的2种情况及解决
2014/04/23 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
2016/04/18 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
python使用电子邮件模块smtplib的方法
2016/08/28 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
EGO Shoes美国/加拿大:英国时髦鞋类品牌
2018/08/04 全球购物
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
eBay加拿大站:eBay.ca
2019/06/20 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
聘用意向书
2014/07/29 职场文书
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
财务会计岗位职责
2015/02/03 职场文书
经费申请报告范文
2015/05/18 职场文书
MySql开发之自动同步表结构
2021/05/28 MySQL