2012-05-11 34 views
0

我有一個對象數組,每個對象都有一個索引:object-> index,它是一個正整數。如何通過每個對象內的索引對對象數組進行排序?

我有第二個數組,每個條目都是一個索引,唯一對應於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"); 
相關問題