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内含有大量的你能用到的方法,可以多看看手册哟,切记,是看完,尤其的下面的例子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值