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 生成饼图 三维饼图
Sep 28 PHP
php创建基本身份认证站点的方法详解
Jun 08 PHP
php fsockopen伪造post与get方法的详解
Jun 14 PHP
解决php接收shell返回的结果中文乱码问题
Jan 23 PHP
PHP实现的英文名字全拼随机排号脚本
Jul 04 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
Dec 17 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
php微信开发自定义菜单
Aug 27 PHP
如何打开php的gd2库
Feb 09 PHP
PHP静态成员变量
Feb 14 PHP
PHP数据分析引擎计算余弦相似度算法示例
Aug 08 PHP
php文件操作之文件写入字符串、数组的方法分析
Apr 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 定界符 使用技巧
2009/06/14 PHP
php中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
php生成gif动画的方法
2015/11/05 PHP
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
2009/10/25 Javascript
在javascript中实现函数数组的方法
2013/12/25 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
node.js中的fs.unlinkSync方法使用说明
2014/12/15 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
JQuery validate插件验证用户注册信息
2016/05/11 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
详解JS中统计函数执行次数与执行时间
2018/09/04 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
让IDE识别webpack的别名alias的实现方法
2020/05/06 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
原生js实现随机点名
2020/07/05 Javascript
vue 判断元素内容是否超过宽度的方式
2020/07/29 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
Python 中的 else详解
2016/04/23 Python
pyspark 随机森林的实现
2020/04/24 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
与UNIX有关的几个名词
2015/09/17 面试题
信息学院毕业生自荐信范文
2014/03/04 职场文书
党校个人总结
2015/03/04 职场文书
男人帮观后感
2015/06/18 职场文书
2019客服个人年终工作总结范文
2019/07/08 职场文书
咖啡厅里的创业计划书
2019/08/21 职场文书
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL