您的位置 首页 php

PHP实现灵活排序

PHP实现灵活排序

背景

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

实现

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

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方法返回的就是排序后的指标数组了,只是这个算法不忧,后续还可以再优化。

搞定!!!!

文章来源:智云一二三科技

文章标题:PHP实现灵活排序

文章地址:https://www.zhihuclub.com/150249.shtml

关于作者: 智云科技

热门文章

网站地图