对ThinkPHP模型查询出的结果数据集进行排序的方法
相信很多小伙伴也在用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 转载需授权!