当前位置:首页 > PHP > 正文内容

在php中使用接口 实现 拖拽排序 功能

Yusoon3年前 (2022-05-18)PHP606

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

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

先分析一个场景,假如有一个页面有十条数据,所谓的拖拽就是在这十条数据来来回回的拖,但是每次拖动都会影响到其他数据。
例如把最后一条拖到最前面,那么后面九条就自动往后移,反之也是,嗯~
先想象一下,排序号是固定的,就好像有十把椅子,每个椅子都是固定在那里的,移动的是上面的人,这样就不会影响到其他页面的数据了。
而且每个人换的也是之前其他人的桌椅号码,这样也不用去想到底要加多少才能排在哪里。
接口设计代码如下:

//$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];
   }
  //保存到数据库省略
}

查看原文

扫描二维码推送至手机访问。

版权声明:本文由Yusoon - ZBlog发布,如需转载请注明出处。

本文链接:https://blog.bee1001.com/?id=15

分享给朋友:

“在php中使用接口 实现 拖拽排序 功能” 的相关文章

PHP之Trait详解

用法:通过在类中使用use 关键字,声明要组合的Trait名称,具体的Trait的声明使用Trait关键词,Trait不能实例化如下代码实例:<?php trait Dog{ public $name="dog"; public function ba...

[精选] 大佬们都喜欢看设计模式,你知道PHP设计模式有哪些呢?

[精选] 大佬们都喜欢看设计模式,你知道PHP设计模式有哪些呢?

设计模式,是每个程序员必须知道,必须学习的知识,虽然不算是基础,但是你必须要懂得。 我这里所了解的大概有23种设计模式,PHP常见的大概有10几种吧。总体来说设计模式分为三大类:创建型模式共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式共七种:适配器模式、装饰器模式、...

thinkphp 合并两个字段组合成一个临时字段concat函数

$this->whereLike('job_no|user_name', '%' . $user . '%')->field('id as value,concat(user_name," - ",job_no)...

ThinkPHP6 高级查询

快捷查询快捷查询方式是一种多字段相同查询条件的简化写法,可以进一步简化查询条件的写法,在多个字段之间用|分割表示OR查询,用&分割表示AND查询,可以实现下面的查询,例如: Db::table('think_user') ->where('name|title','like...