2012-06-20 14 views
5

mam dość dużą tablicę, która wygląda jakPHP sort tablica stdClass Objects przez id

Array(
    [0] => stdClass Object 
     (
      [id] => 8585320 
      [title] => the title 
      [type] => page 
      [url] => link.com 
      [excerpt] => brief description 
     ) 

    [1] => stdClass Object 
     (
      [id] => 8585320 
      [title] => the title 
      [type] => page 
      [url] => link.com 
      [excerpt] => brief description 
     ) 
) 

nie mam pozorną kontrolę nad sposobem tablica jest tworzony, i jak to wychodzi, wydaje się, nie ma w tym żadnej logiki. Ale utknąłem z tym. To, co muszę zrobić, to po prostu wziąć tablicę, posortować ją numerycznie przez każdy obiekt stdClass, a następnie upewnić się, że id są od największego do najmniejszego i od najmniejszego do największego. Cały czas zachowując aktualną strukturę kombinacji obiektów macierzowych, nie mogę nawet pomyśleć, jak powinienem przystąpić do sortowania jej tak, jak tego potrzebuję. Jak już było wystarczająco długo.

UPDATE

public function updateRet($a, $b) { 
     return $b->id - $a->id; 
    } 
usort($ret, 'updateRet'); 

Odpowiedz

10

Wystarczy użyć usort:

function compare_some_objects($a, $b) { // Make sure to give this a more meaningful name! 
    return $b->id - $a->id; 
} 

// ... 

usort($array, 'compare_some_objects'); 

Jeśli masz PHP 5.3 lub nowszego, można również korzystać z anonimową funkcję:

usort($array, function($a, $b) { return $b->id - $a->id; }); 
+0

Im uzyskanie nieprawidłowego porównania funkcja, myślę o jej przyczynie Mam tablicę z obiektami wewnątrz niej. więc muszę go zmusić do zrobienia '$ b [x] -> id' jakoś, ale tak, że nie działa – chris

+0

Otrzymałem php 5.2 – chris

+0

@chris: Użyj wtedy pierwszej metody. Upewnij się, że funkcja została poprawnie zdefiniowana. – Ryan