一、經歷背景
因爲平臺發放了很多獎勵任務給用戶做來確保平臺用戶的活躍度,那麼就會有查看用戶在這個子平臺的所有的任務,並按照一定的規則和權重來展示給用戶,那麼這個一定的規則就需要自己去想嘍
二、它來了,它來了
既然是有獎勵的任務,首要的規則是麥粒降序吧,其次是任務的創建時間吧,目前就能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內含有大量的你能用到的方法,可以多看看手冊喲,切記,是看完,尤其的下面的例子