本文主要是介绍array_multisort 对多个数组或多维数组进行排序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、经历背景
因为平台发放了很多奖励任务给用户做来确保平台用户的活跃度,那么就会有查看用户在这个子平台的所有的任务,并按照一定的规则和权重来展示给用户,那么这个一定的规则就需要自己去想喽
二、它来了,它来了
既然是有奖励的任务,首要的规则是麦粒降序吧,其次是任务的创建时间吧,目前就能YY到这两种,今天就按照这两种来实现
三、挡住—实现
首先对于数据的操作,肯定一堆查询,获取子平台的文章、调研、会议、聊天室等类型的所有任务合集,那合在了一起以后,排序吧,一个方法搞定,就是这么神奇,这个重量级的嘉宾就是array_multisort
方法说明:
array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] ) : bool
参数 | 解析 |
---|---|
array1 | 要排序的数组array |
array1_sort_order | 之前 array 参数要排列的顺序。 SORT_ASC 按照上升顺序排序, SORT_DESC 按照下降顺序排序。此参数可以和 array1_sort_flags 互换,也可以完全删除,默认是 SORT_ASC |
array1_sort_flags | 为 array 参数设定选项: |
… | 可选的选项,可提供更多数组,跟随在 sort order 和 sort flag 之后。 提供的数组和之前的数组要有相同数量的元素。 换言之,排序是按字典顺序排列的 |
排序类型标志:
- SORT_REGULAR - 将项目按照通常方法比较(不修改类型)
- SORT_NUMERIC - 按照数字大小比较
- SORT_STRING - 按照字符串比较
- SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。 它会使用 locale 信息,可以通过 setlocale() 修改此信息
- SORT_NATURAL - 以字符串的"自然排序",类似 natsort()
- SORT_FLAG_CASE - 可以组合 (按位或 OR) SORT_STRING 或者 SORT_NATURAL 大小写不敏感的方式排序字符串
3.1、数据库的结果为:
array:4 [▼0 => array:9 [▼"id" => 48402"title" => "测试主题""type" => "meeting""is_finish" => 0"url" => "http://edp.medlive.test/doctor/activity/transit/48402?from=wechat_task_center""created_at" => 1569296548"name" => "EDP学术""headtitle" => "EDP学术""maili" => 50]1 => array:9 [▼"id" => 45882"title" => "您好""type" => "chat""is_finish" => 0"url" => "http://edp.medlive.test/doctor/activity/talk/45882""created_at" => 1568785867"name" => "EDP研究""headtitle" => "EDP研究""maili" => 20]2 => array:9 [▼"id" => 46175"title" => "你好""type" => "chat""is_finish" => 1"url" => "http://edp.medlive.test/doctor/activity/talk/46175""created_at" => 1568858009"name" => "EDP研究""headtitle" => "EDP研究""maili" => 20]3 => array:9 [▼"id" => 47041"title" => "确认""type" => "chat""is_finish" => 0"url" => "http://edp.medlive.test/doctor/activity/talk/47041""created_at" => 1568964549"name" => "EDP研究""headtitle" => "EDP研究""maili" => 20]
]
3.2、直接操作
$array_column = array_column($aAllTasks, 'maili');$array_column_other = array_column($aAllTasks,'created_at');array_multisort($array_column, SORT_DESC ,$array_column_other, SORT_DESC ,$aAllTasks);
很简单,是吧,array_column是直接根据你给定的索引获取数组中值,当然你可以可以想php.net网站中的示例一样:
// 取得列的列表
foreach ($data as $key => $row) {$volume[$key] = $row['volume'];$edition[$key] = $row['edition'];
}// 将数据根据 volume 降序排列,根据 edition 升序排列
// 把 $data 作为最后一个参数,以通用键排序
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
这样出来的结果就是:按照maili字段降序排列,当maili值一样的时候,根据created_at值再降序排列,OVER!
四、走喽
其实对于数组的处理,PHP内含有大量的你能用到的方法,可以多看看手册哟,切记,是看完,尤其的下面的例子
这篇关于array_multisort 对多个数组或多维数组进行排序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!