当前位置:首页 > 编程技术 > php技术 > 正文内容

对ThinkPHP模型查询出的结果数据集进行排序的方法

车厘子9个月前 (07-20)php技术475

   相信很多小伙伴也在用ThinkPHP进行项目开发,ThinkPHP的模型功能可以很方便的对数据库进行增删改查的操作,ThinkPHP的模型也自带了order()方法进行原生MySql排序查询。但是可能会有一些业务逻辑需要将查询的数据集进行二次处理以及排序等操作,今天给大家分享一个ThinkPHP模型查询出的结果集进行排序的方法。


首先需要得到数据集

ThinkPHP的模型通过以下方式查询出的是一个\think\Collection 类的数组:

//获取模型所有数据
$collection = Model::all();

//where查询
$collection = Model::where('status','1')->select();

数据集排序方法

想要很灵活的对数据集进行排序,可以将排序方法封装成一个php方法,方法如下(下面的方法使用了冒泡排序进行升序排序的方法):

/**
 * 对数据集结果进行升序排序
 * @param array $collection 模型查询的结果数组或者数据集Collection
 * @param string $field 要排序的字段
 * @return array
 */
public static function collectionSort(array $collection, string $field): array
{
    $n = count($collection);

    for($i = 0; $i < $n-1; $i++){

        for ($j = 0; $j < $n-$i-1; $j++) {

            if ($collection[$j][$field] > $collection[$j+1][$field]) {
                // 交换元素位置
                $temp = $collection[$j];
                $collection[$j] = $collection[$j+1];
                $collection[$j+1] = $temp;
            }
        }

    }

    return $collection;

}

开始排序

我们拿到数据集,并且也定义了一个排序方法后,就可以直接调用我们定义的方法进行排序即可:

//假如获取到User数据表的所有用户
$collection = User::where('status','1')->select();

//按照用户余额进行排序
$collection = collectionSort($collection,'money');


本文链接:https://yun.ha.cn/post/143.html 转载需授权!

分享到:

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

版权声明:本文由云蛤社区发布,如需转载请注明出处。

技术交流QQ群:657091037

部分文章和资源从互联网中收集,如有侵权 联系站长删除。

本文链接:https://yun.ha.cn/post/143.html

标签: 云蛤原创
分享给朋友:

“对ThinkPHP模型查询出的结果数据集进行排序的方法” 的相关文章

php自动计算并转换流量单位(b kb mb gb tb转换)的方法

php自动计算并转换流量单位(b kb mb gb tb转换)的方法

   我们都知道系统的流量统计都是以字节单位进行存储,如果我们在做流量统计相关功能时,不可能直接将字节显示给用户,如果直接显示比特将会是很长一段数字,例如:1KB = 1024b1MB = 1048576b1GB = 1073741824b  由此可...

php时间日期计算方法

php时间日期计算方法

  php自带的函数strtotime(),可以用来快速计算一天后、一周后、一个月后、一年后的时间。可以用于计算会员到期日,产品到期时间等等。具体用法$today = date('Y-m-d'); //今天的日期 $wutian =...

php通过时间戳自动计算 1分钟前,N小时前,N年前的例子

php通过时间戳自动计算 1分钟前,N小时前,N年前的例子

  最近刚好有一个php项目需求,需要用显示帖子的发布时间,时间显示格式要求是这种的:N分钟前,N小时前,N个月前,N年前;其实实现方法有很多种,我这里就用了最简单傻瓜式的方式来写。直接判断秒数来输出对应的时间,具体如下:1分钟 = 60秒1小时 = 3600秒一天(24小时) =&nbs...

php实现监听Redis缓存过期回调的方法

php实现监听Redis缓存过期回调的方法

Redis简介   Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis缓存过期Redis是可以设置一个Key的...

PHP实现腾讯云cos对象储存盲水印添加获取文档

PHP实现腾讯云cos对象储存盲水印添加获取文档

    盲水印功能基于腾讯云数据万象,是一种全新的水印模式。通过该功能,您可将水印图以不可见的形式添加到原图信息中,并且不会对原图质量产生太大影响。当发现图片被盗取后,您可对疑似被盗取的资源进行盲水印提取,验证图片归属。 通过该 A...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。