我有一个大的多维数组,想按给定的顺序对其进行排序,下面是示例数组
$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'),
);
[请帮助我找到实现这一目标的最佳做法。
您可以使用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);