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边学边教》(02.Apache+PHP环境配置――下篇)
Dec 13 PHP
php 编写安全的代码时容易犯的错误小结
May 20 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
Dec 10 PHP
php面向对象中static静态属性和静态方法的调用
Feb 08 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
Oct 27 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
Nov 23 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
Jul 14 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
Sep 13 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 PHP
PHP实现的DES加密解密类定义与用法示例
Nov 02 PHP
Centos7 Yum安装PHP7.2流程教程详解
Jul 02 PHP
tp5.1 实现setInc字段自动加1
Oct 18 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 array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
datePicker——日期选择控件(with jquery)
2007/02/20 Javascript
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
window.onerror()的用法与实例分析
2016/01/27 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
JavaScript中的工厂函数(推荐)
2017/03/08 Javascript
常用的js方法合集
2017/03/10 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
浅析前端路由简介以及vue-router实现原理
2018/06/01 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
Python 自动补全(vim)
2014/11/30 Python
Python 绘图和可视化详细介绍
2017/02/11 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
使用python动态生成波形曲线的实现
2019/12/04 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
办公室助理岗位职责
2013/12/25 职场文书
人力资源主管职责范本
2014/03/05 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
五年级上册复习计划
2015/01/19 职场文书
毕业生个人自荐书
2015/03/05 职场文书
催款函范本大全
2015/06/24 职场文书
2015年教务主任工作总结
2015/07/22 职场文书
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript