php通过键对关联数组进行排序,这些键存在于其他数组中

时间:2013-03-08 15:17:41

标签: php arrays associative

我有这个数组

$myArray=array(

'a'=>array('id'=>1,'text'=>'blabla1'),
'b'=>array('id'=>2,'text'=>'blabla2'),
'c'=>array('id'=>3,'text'=>'blabla3'),
'd'=>array('id'=>4,'text'=>'blabla4'),

);

我希望用另一个数组中存在的键a,b,c,d对上面的数组进行排序:

$tempArray=array('c','a','d','b');

我怎么能这样做$ myArray

看起来像这样:

$myArray=array(

'c'=>array('id'=>3,'text'=>'blabla3'),
'a'=>array('id'=>1,'text'=>'blabla1'),
'd'=>array('id'=>4,'text'=>'blabla4'),
'b'=>array('id'=>2,'text'=>'blabla2'),

);

谢谢你的帮助!

1 个答案:

答案 0 :(得分:3)

最简单且最有效的方法是迭代包含排序顺序的数组并创建一个新的排序数组:

$sorted = array();

foreach ($tempArray as $order) {
  if (isset($myArray[$order])) {
    $sorted[$order] = $myArray[$order];
  }
}

print_r($sorted);

这是有效的,因为关联数组隐含地具有元素添加到数组的顺序。

See it working


修改

任何涉及排序功能的解决方案都可能效率低于此。这是因为为了做到这一点,你需要使用一个带回调的函数 - 这已经隐含了函数调用的开销。

排序功能也可以通过比较项目来实现,这意味着任何这些解决方案的复杂性都将大于此解决方案的复杂性(复杂性只是O(n))。此外,为了获得排序函数的返回值,您需要检查目标数组,找到每个比较的键的位置,对于每次比较,都会增加更多的复杂性。