按给定序列排序多维数组

问题描述 投票:0回答:1

我有一个大的多维数组,想按给定的顺序对其进行排序,下面是示例数组

    $list = array(
 array('name'=>'a','sports' => 'HOCKEY'),
  array('name'=>'b','sports' => 'FOOTBALL'),
  array('name'=>'c','sports' => 'CRICKET'),
  array('name'=>'d','sports' => 'TENNIS'),
  array('name'=>'e','sports' => 'BASKETBALL'),
  array('name'=>'f','sports' => 'BADMINTON'),
);
$sequence = ['CRICKET','BADMINTON','FOOTBALL','HOCKEY','BASKETBALL','TENNIS']

想要这样的结果:

$list = array(
    array('name'=>'c','sports' => 'CRICKET'),
    array('name'=>'f','sports' => 'BADMINTON'),
    array('name'=>'b','sports' => 'FOOTBALL'),
    array('name'=>'a','sports' => 'HOCKEY'),
    array('name'=>'e','sports' => 'BASKETBALL'), 
    array('name'=>'d','sports' => 'TENNIS'),
);

[请帮助我找到实现这一目标的最佳做法。

php arrays multidimensional-array php-7
1个回答
0
投票

您可以使用usort执行此操作,根据usort中的键对元素进行排序(使用$sequence找到):

array_search

输出:

array_search

$list = array( array('name'=>'a','sports' => 'HOCKEY'), array('name'=>'b','sports' => 'FOOTBALL'), array('name'=>'c','sports' => 'CRICKET'), array('name'=>'d','sports' => 'TENNIS'), array('name'=>'e','sports' => 'BASKETBALL'), array('name'=>'f','sports' => 'BADMINTON'), ); $sequence = ['CRICKET','BADMINTON','FOOTBALL','HOCKEY','BASKETBALL','TENNIS']; usort($list, function ($a, $b) use ($sequence) { return array_search($a['sports'], $sequence) - array_search($b['sports'], $sequence); }); print_r($list);

© www.soinside.com 2019 - 2024. All rights reserved.