【问题标题】:Sort an array by values in another array按另一个数组中的值对数组进行排序
【发布时间】:2019-10-16 09:09:33
【问题描述】:

我有一个问题,这似乎很基本,但我无法得到一个简单的解决方案,我认为一定有一个。

我有一个数组需要按特定顺序带入。

$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];

感谢任何帮助!谢谢!

【问题讨论】:

标签: php arrays sorting php-7


【解决方案1】:

您可以将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

【讨论】:

  • 谢谢!比我的解决方案更优雅。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
相关资源
最近更新 更多