2012-05-11 2 views
0

나는 개체의 배열을 가지고, 각 개체의 색인 : 개체 - 인덱스, 양의 정수입니다.각 개체 내부의 인덱스별로 개체 배열을 정렬하는 방법은 무엇입니까?

두 번째 배열이 있습니다. 각 항목은 인덱스이며, object-> index 중 하나와 고유하게 일치합니다. 개체의 첫 번째 배열을 정렬하여 두 번째 배열 인덱스의 순서와 같은 순서로 정렬하려고합니다.

의미가 있습니까?

감사합니다.

+0

쇼 코드 –

+0

의 일부는 그래서 당신은 배열 ('1'=> 개체 -> 인덱스가 {= 1}, '2'=> 객체 - > index (= 2)), 내부 {}은 색인 값입니다. 그리고 같은 구조를 가진 두 번째 배열을 가지며 한 배열을 다른 배열과 같은 순서로 정렬하고 싶습니까? – Churk

답변

1

나는 두 번째 배열 (array_flip)를 플립 것입니다. 그럼 당신은 너무처럼 객체를 반복 할 수 있습니다

$indices = array_flip($second_array); 
$sorted_objects = array(); 
foreach ($objects as $object) { 
    $sorted_objects[$indices[$object->index]] = $object; 
} 
+0

+1 그 중 하나 또는'array_search()'를 사용하십시오. 나중에'ksort ($ sorted_objects);를 써서 원하는 순서로 반복 할 수도 있습니다. – Wiseguy

+0

감사! 이것은 효과가 있었다. Wiseguy도 정확했고 나중에 ksort가 필요했습니다. –

+0

@Hardworker, 또는 $ sorted_objects = array_fill (0, count ($ objects), NULL);을 사용하여 객체가 추가되지 않고 적절한 위치에 삽입되도록 할 수 있습니다 (PHP가 올바른 키가 숫자 인 경우에는 순서를 지정하지만 분명히 그렇지 않은 경우). – Brian

0
$objArray = ...; 
$sortArray = ...; 
$newArray = array(); // the sorted array 

foreach($sortArray as $index) 
{ 
    foreach($objArray as $obj) 
    { 
    if($obj->index === $index) 
    { 
     $newArray[] = $obj; 
     break; 
    } 
    } 
} 

?

0

체크 아웃 usort (http://au.php.net/manual/en/function.usort.php) :이 기능을 지정하여 배열을 정렬 할 수 있습니다. 이 함수는 객체의 인덱스를 얻는 것입니다. 더 쉽게 개체의 원하는 위치를 검색 할 수 있도록

function cmp($obj1, $obj2) { 

    if ($obj1->index == $obj2->index) { 
     return 0; 
    } 
    return ($obj1->index < $obj2->index) ? -1 : 1; 
} 

usort($aObjects, "cmp"); 
관련 문제