2013-03-08 90 views
0

存在这些密钥我有这样的阵列PHP排序键关联数组,在其它阵列

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

); 

感谢您的帮助!

+0

你试过'array_shift()'吗? – Kermit 2013-03-08 15:19:45

+3

http://php.net/manual/en/function.uksort.php – mkaatman 2013-03-08 15:20:14

+0

我不知道如何array_shift可以帮助,但uksort我认为可以 – gadlol 2013-03-08 15:24:16

回答

3

最简单和可能最有效的方式来做到这一点是通过迭代保存排序顺序排列,并创建一个新的,有序数组:

$sorted = array(); 

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

print_r($sorted); 

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

See it working


EDIT

任何涉及一个排序函数溶液可能会比该效率低得多。这是因为要做到这一点,你需要使用一个回调函数 - 这已经隐含了函数调用的开销。

排序功能也可以通过比较项目来工作,这意味着这些解决方案的复杂性将比这个解决方案的复杂性更大(其复杂性仅仅是O(n))。另外,为了得到排序函数的返回值,您需要检查目标数组,找到每个比较的每个键的位置,从而增加更多的复杂性。

+0

我已经这样做!但我想用一个PHP排序fucntion! – gadlol 2013-03-08 15:23:05

+0

@jBaron http://php.net/usort - 用户自定义的排序 – 2013-03-08 15:23:33

+0

@MikeB uksort是他需要的 – mkaatman 2013-03-08 15:24:21