php接口实现拖拽排序功能

 更新时间:2018年04月23日 14:02:06   作者:chriiess  
列表拖拽排序是一个很常见的功能,在后端接口处理中经常会用到,今天小编给大家带来了php接口实现拖拽排序功能,感兴趣的朋友一起看看吧

列表拖拽排序是一个很常见的功能,但是后端接口如何处理却是一个令人纠结的问题

如何实现才能达到效率最高呢?

先分析一个场景,假如有一个页面有十条数据,所谓的拖拽就是在这十条数据来来回回的拖,但是每次拖动都会影响到其他数据例如把最后一条拖到最前面,那么后面九条就自动往后移,反之也是,嗯~~~

先想象一下,排序号是固定的,就好像有十把椅子,每个椅子都是固定在那里的,移动的是上面的人,这样就不会影响到其他页面的数据了而且每个人换的也是之前其他人的桌椅号码,这样也不用去想到底要加多少才能排在哪里。

接口设计:

//$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接口实现拖拽排序功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Laravel-admin之修改操作日志的方法

    Laravel-admin之修改操作日志的方法

    今天小编就为大家分享一篇Laravel-admin之修改操作日志的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • PHP 二维数组和三维数组的过滤

    PHP 二维数组和三维数组的过滤

    本文给大家介绍PHP 二维数组和三维数组的过滤,涉及到php三维数组变二维数组的相关知识,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-03-03
  • PHP网站开发中常用的8个小技巧

    PHP网站开发中常用的8个小技巧

    这篇文章主要介绍了PHP网站开发中常用的8个小技巧,本文讲解了命名、使用、PHP判断Form表单是否提交、PHP 获取字符串长度、PHP超全局对象等内容,需要的朋友可以参考下
    2015-02-02
  • Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法

    Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法

    这篇文章主要介绍了Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法,简单分析了Laravel扩展包的安装及视图的创建与删除操作相关技巧,需要的朋友可以参考下
    2016-10-10
  • ThinkPHP实现附件上传功能

    ThinkPHP实现附件上传功能

    这篇文章主要为大家详细介绍了ThinkPHP实现附件上传功能,图片,文档,视频等文件进行上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Laravel 5.5 的自定义验证对象/类示例代码详解

    Laravel 5.5 的自定义验证对象/类示例代码详解

    Laravel 5.5 将提供一个全新的自定义验证规则的对象,以作为原来的 Validator::extend 方法的替代。接下来通过示例代码给大家介绍laravel 自定义验证对象和类,需要的朋友参考下吧
    2017-08-08
  • php+ajax实现无刷新动态加载数据技术

    php+ajax实现无刷新动态加载数据技术

    无刷新功能我们用到很多很多的,下面我就来给各位介绍一个实例,就是实现php+ajax实现无刷新滚屏加载数据,例子非常的简单大家只要按流程来操作就可以了哦。
    2015-04-04
  • 深入浅析yii2-gii自定义模板的方法

    深入浅析yii2-gii自定义模板的方法

    Yii 是一个高性能,基于组件的 PHP 框架,用于快速开发现代 Web 应用程序。接下来通过本文给大家介绍yii2-gii自定义模板的方法,需要的朋友参考下吧
    2016-04-04
  • PHP使用POP3读取邮箱接收邮件的示例代码

    PHP使用POP3读取邮箱接收邮件的示例代码

    这篇文章主要介绍了PHP如何使用POP3读取邮箱接收邮件,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • thinkPHP多域名情况下使用memcache方式共享session数据的实现方法

    thinkPHP多域名情况下使用memcache方式共享session数据的实现方法

    这篇文章主要介绍了thinkPHP多域名情况下使用memcache方式共享session数据的实现方法,较为详细的分析了session的原理及多服务器共享session的相关技巧,需要的朋友可以参考下
    2016-07-07

最新评论