我有这个数组:
$pets = array(
'cat' => 'Lushy',
'dog' => 'Fido',
'fish' => 'Goldie'
);
如果我需要重新排序数组:
fish
dog
cat
按此顺序并假设任何这些值可能存在或不存在,是否有更好的方法:
$new_ordered_pets = array();
if(isset($pets['fish'])) {
$new_ordered_pets['fish'] = $pets['fish'];
}
if(isset($pets['dog'])) {
$new_ordered_pets['dog'] = $pets['dog'];
}
if(isset($pets['cat'])) {
$new_ordered_pets['cat'] = $pets['cat'];
}
var_dump($new_ordered_pets);
输出:
Array
(
[fish] => Goldie
[dog] => Fido
[cat] => Lushy
)
是否有一种更清洁的方式,也许是一些内置函数我不知道你只是提供要重新排序的数组以及你希望它被记录的索引并且它具有魔力?
答案 0 :(得分:3)
您可以使用uksort
根据另一个数组对数组进行排序(按键)(仅适用于PHP 5.3+):
$pets = array(
'cat' => 'Lushy',
'dog' => 'Fido',
'fish' => 'Goldie'
);
$sort = array(
'fish',
'dog',
'cat'
);
uksort($pets, function($a, $b) use($sort){
$a = array_search($a, $sort);
$b = array_search($b, $sort);
return $a - $b;
});
答案 1 :(得分:2)
您已有订单,因此您只需指定值(Demo):
$sorted = array_merge(array_flip($order), $pets);
print_r($sorted);
输出:
Array
(
[fish] => Goldie
[dog] => Fido
[cat] => Lushy
)
答案 2 :(得分:0)
您需要的是uksort。
// callback
function pets_sort($a,$b) {
// compare input vars and return less than, equal to , or greater than 0.
}
uksort($pets, "pets_sort");