PHP:有没有更好的方法对数组的值重新排序?

PHP:有没有更好的方法对数组的值重新排序?,php,arrays,Php,Arrays,我有这个阵列: $pets = array( 'cat' => 'Lushy', 'dog' => 'Fido', 'fish' => 'Goldie' ); 如果我需要通过以下方式重新排列阵列: fish dog cat 按照该顺序并假设这些值中的任何一个可能存在或不存在,是否有比以下更好的方法: $new_ordered_pets = array(); if(isset($pets['fish'])) { $new_ordered_pets

我有这个阵列:

$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
)

是否有一种更简洁的方法,可能是我不知道的某个内置函数,您只需提供要重新排序的数组和您希望记录该数组的索引,它就能发挥神奇的作用?

您可以使用
uksort
根据另一个数组(仅适用于PHP 5.3+)对数组进行排序(按键):


演示:

您可以使用
uksort
根据另一个数组对数组进行排序(按键排序)(仅适用于PHP5.3+):

演示:

您需要的是

你需要的是


您已经有了顺序,因此只需分配值():

输出:

Array
(
    [fish] => Goldie
    [dog] => Fido
    [cat] => Lushy
)

相关:

您已经有了订单,因此只需分配值():

输出:

Array
(
    [fish] => Goldie
    [dog] => Fido
    [cat] => Lushy
)

相关:

-如果这不是您要查找的函数,请向下滚动查看相关函数的列表,或在左侧查看所有数组函数。嗯,嘿,closvoter,关于数组排序的一般问题是如何本地化的?如果你想关闭它,搜索并找到一个重复的,因为很可能有一个。但不要用虚假的接近事实的理由作弊。@Michael:我想说,闻起来像个傻瓜。因此太本地化了,问题已经被问到并解决了,再问这个问题也太本地化了。@hakre不是我读过的太本地化的定义,甚至一点也不是。我同意,它闻起来也像是一个骗局,因此社区有责任找到它并将其适当地链接起来。@Michael:这可能更正确,是的。-如果这不是您要查找的函数,请向下滚动查看相关函数的列表,或在左侧查看所有数组函数。嗯,嘿,closvoter,关于数组排序的一般问题是如何本地化的?如果你想关闭它,搜索并找到一个重复的,因为很可能有一个。但不要用虚假的接近事实的理由作弊。@Michael:我想说,闻起来像个傻瓜。因此太本地化了,问题已经被问到并解决了,再问这个问题也太本地化了。@hakre不是我读过的太本地化的定义,甚至一点也不是。我同意,它闻起来也像是个骗局,因此社区有责任找到它并将其适当链接。@Michael:这可能更正确,是的。@ExplosionPills:
ksort
如何知道它们的顺序?我想
ksort
会按字母顺序排序字符串(或者在这种情况下
krsort
)但也许不是。这就是我要问的。实际上我还没有检查过自己。@ExplosionPills:会的,但我想他想要一个自定义排序顺序,而且碰巧是(逆)字母顺序。@ExplosionPills:如何
ksort
知道它们的顺序?我想
ksort
会按字母顺序排序字符串(或者在这种情况下
krsort
)但也许不是。这就是我要问的。实际上我还没有检查过自己。@ExplosionPills:会的,但我想他想要一个自定义排序顺序,而且碰巧是(逆)字母顺序。另一个+1表示
数组合并
:-)另一个+1表示
数组合并
:-)
$sorted = array_merge(array_flip($order), $pets);

print_r($sorted);
Array
(
    [fish] => Goldie
    [dog] => Fido
    [cat] => Lushy
)