0

我有这个数组

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

);

谢谢你帮助我!

4

1 回答 1

3

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

$sorted = array();

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

print_r($sorted);

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

看到它工作


编辑

任何涉及排序功能的解决方案都可能比这效率低得多。这是因为为了做到这一点,您需要使用一个接受回调的函数——这已经隐含了函数调用的开销。

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

于 2013-03-08T15:20:59.190 回答