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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章