2013-03-08 2 views
0

존재 키로 연관 배열 I이 배열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에 의해 상기 어레이를 정렬하고자 배열 :

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

); 
:

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

나는 그래서 $ myArray의

이 같다고 할 수있는 방법

나를 도와 주셔서 감사합니다!

+0

'array_shift()'를 시도해 보셨습니까? – Kermit

+3

http://php.net/manual/en/function.uksort.php – mkaatman

+0

array_shift가 도움이 될 수있는 방법을 알지 못하지만 uksort는 내가 할 수 있다고 생각합니다. – gadlol

답변

3

간단하고 가능성이 가장 효율적으로이 작업을 수행하는 방법, 새로운 정렬 된 배열 정렬 순서를 보유하고있는 배열을 반복하고 만드는 것입니다 : 연관 배열이 암시의 순서를 가지고 있기 때문에이 작동

$sorted = array(); 

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

print_r($sorted); 

을 요소가 배열에 추가 된 순서.

See it working


편집

정렬 기능을 포함하는 모든 솔루션 가능성이 훨씬 덜 효율적이보다됩니다. 이를 위해서는 콜백을 사용하는 함수를 사용해야 할 필요가 있습니다.이 함수는 이미 함축 된 오버 헤드를 가지고 있기 때문입니다.

정렬 기능은 항목을 비교하여도 작동합니다. 즉, 솔루션의 복잡도가이 솔루션의 복잡도보다 클 것입니다 (복잡도는 단순히 O(n) 임). 또한 정렬 함수의 반환 값을 파생하려면 대상 배열을 검사하여 비교할 각 키의 위치를 ​​찾고 비교할 때마다 더 많은 복잡성을 추가해야합니다.

+0

나는 이미 그렇게했습니다! 하지만 난 PHP 정렬 기능을 사용하고 싶습니다! – gadlol

+0

@jBaron http://php.net/usort - 사용자 정의 정렬 –

+0

@MikeB uksort는 그가 필요로하는 것입니다 – mkaatman