php sort associative arrays by keys that those key

2019-09-03 09:15发布

I have this array

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

);

and i want to sort the above array by the keys a,b,c,d, who exist in another array:

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

How can I do that so the $myArray

looks like this:

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

);

thanks for helping me!

1条回答
Melony?
2楼-- · 2019-09-03 09:39

The simplest and likely most efficient way to do this is by iterating the array that holds the sort order and creating a new, sorted array:

$sorted = array();

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

print_r($sorted);

This works because associative arrays implicitly have an order of the order in which elements were added to the array.

See it working


EDIT

Any solution involving a sorting function will likely be much less efficient than this. This is because in order to do it you will need to use a function that takes a callback - this already has an implied overhead of the function call.

The sorting functions also work by comparing items, meaning that the complexity any of those solutions will be greater than that of this solution (the complexity of this is simply O(n)). Also, in order to derive the return value for the sorting function you would need to inspect the target array, finding the position of each of the keys being compared, for each comparison, adding even more complexity.

查看更多
登录 后发表回答