簡體   English   中英

按另一個數組中的值對數組進行排序

[英]Sort an array by values in another array

我有一個問題,這可能看起來很基本,但我不能得到一個簡單的解決方案,我認為必須有一個。

我有一個數組,我需要帶來一個特定的順序。

$arr1 = [
       ['code' => 555, 'amount' => 100],
       ['code' => 555, 'amount' => 200],
       ['code' => 555, 'amount' => 300],
       ['code' => 222, 'amount' => 100],
       ['code' => 222, 'amount' => 200],
       ['code' => 222, 'amount' => 300],
       ['code' => 777, 'amount' => 100],
       ['code' => 777, 'amount' => 200],
       ['code' => 777, 'amount' => 300]
]

我希望它按此順序帶來:

$sortedArr = [
       ['code' => 555, 'amount' => 100],
       ['code' => 222, 'amount' => 100],
       ['code' => 777, 'amount' => 100],
       ['code' => 555, 'amount' => 200],
       ['code' => 222, 'amount' => 200],
       ['code' => 777, 'amount' => 200],
       ['code' => 555, 'amount' => 300],
       ['code' => 222, 'amount' => 300],
       ['code' => 777, 'amount' => 300]
]

如果這有幫助,我確實有另一個數組與代碼的確切順序

 $codes = [555, 222, 777];

任何幫助表示贊賞! 謝謝!

您可以使用usort和用戶定義的比較函數。

如果您使用特殊的PHP類,有一個簡單的解決方案。

$codes = [555, 222, 777];  

$sortedArr = tableArray::create($arr1)
  ->addSQLfunction('weight',function($v) use($codes){
      $order = array_search($v,$codes);
      return $order !== false ? $order : PHP_INT_MAX;
    })
  ->orderBy('amount ASC, weight(code) ASC')
  ->fetchAll()
;
//class: https://github.com/jspit-de/tableArray

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM