PHP实现灵活排序

2022-10-11 20:44:44 118 0
魁首哥

PHP实现灵活排序

背景

我平时的工作是做数据报表,近期产品提了个需求,要把报表的指标顺序灵活调整。原先的排序是按自增id排序,现在要批量的灵活调整就有点麻烦了,基于现有的自增id只能每次都手动重刷,对于工程师来说这么笨的方法自然是无法接受的,所以就想用单链表的数据结构实现,只需要调整几个指向就可以实现灵活排序。

实现

实现过程其实挺简单,表结构只要增加两列:sort、sort_next

PHP实现灵活排序

sort用来做自然升序控制,因为id可能是有间隔的。

sort_next用来做指针,指向下一个指标。

SQL查询只用保证按sort字段排序就可以了。

 select * from table order by sort;
  

接下来就是关键的程序逻辑

 function findRow($array, $id)
{
    foreach ($array as $current_row) {
        if ($current_row['sort'] === $id)
            return $current_row;
    }
    return null;
}

function whatTheHeckSort($array)
{
    $result = [];
    $keep_next = [];
    $last = $array[count($array) - 1];
    for ($i = 0; $i < count($array); $i++) {
        $working_record = $array[$i];
        // 如果已经找过了,就不再找了
        if (!isset($keep_next[$working_record['sort_next']])) {
            array_push($result, $working_record);
        }
        $j = $i;
        while ($working_record['sort_next'] !== null) {
            // 如果已经找过了,就不再找了
            if (isset($keep_next[$working_record['sort_next']])) {
                break;
            }
            $row = findRow($array, $working_record['sort_next']);
            // 保存已经找过的next
            $keep_next[$working_record['sort_next']] = 1;
            if ($row === null) {
                $i = $j;
                break;
            }
            $j++;
            array_push($result, $row);
            $working_record = $row;
        }
        $i = $j;
    }

    return $result;
}
  

whatTheHeckSort方法返回的就是排序后的指标数组了,只是这个算法不忧,后续还可以再优化。

搞定!!!!

收藏
分享
海报
0 条评论
118
上一篇:介绍PHP5.6与PHP7之间的区别 下一篇:PHP学习第十五课:关于类的一些魔术方法

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码