我有这个数组:
$original=[];
$original[]=['value'=>'a','count'=>10];
$original[]=['value'=>'b','count'=>15];
$original[]=['value'=>'c','count'=>23];
$original[]=['value'=>'d','count'=>40];
$original[]=['value'=>'e','count'=>25];
此数组包含应位于$ original数组开头的项目:
$sort=['d','c'];
所以结果最终应该是:
[
(int) 0 => [
'value' => 'd',
'count' => (int) 40
],
(int) 1 => [
'value' => 'c',
'count' => (int) 23
],
(int) 2 => [
'value' => 'a',
'count' => (int) 10
],
(int) 3 => [
'value' => 'b',
'count' => (int) 15
],
(int) 4 => [
'value' => 'e',
'count' => (int) 25
],
]
使用简单的for循环这是可行的,但有一种很好的方法吗?
答案 0 :(得分:0)
您可以使用usort
$priority = ['d', 'c'];
usort($original, function ($a, $b) use ($priority) {
$prioA = array_search($a['value'], $priority);
$prioB = array_search($b['value'], $priority);
if ($prioA !== false && $prioB !== false) {
if ($prioA < $prioB) return -1;
return 1;
}
if ($prioA !== false) return -1;
if ($prioB !== false) return 1;
return 0;
});