2010-01-23 22 views
6

Mam problemy z przykładami w podręczniku PHP, więc chciałbym zapytać o to tutaj ...Sortuj tablicę obiektów

Mam szereg obiektów .. Czy istnieje sposób sortowania to na podstawie zawartości obiektu?

Na przykład, moja tablica jest:

Array 
(
    [0] => stdClass Object 
     (
      [id] => 123 
      [alias] => mike 
     ) 

    [1] => stdClass Object 
     (
      [id] => 456 
      [alias] => alice 
     ) 

    [2] => stdClass Object 
     (
      [id] => 789 
      [alias] => zeke 
     ) 

    [3] => stdClass Object 
     (
      [id] => 987 
      [alias] => dave 
     ) 
) 

Jak sortować tablicę przez [alias] obiektów?

W przykładzie, wyjście powinno być:

Array 
(
    [0] => stdClass Object 
     (
      [id] => 456 
      [alias] => alice 
     ) 

    [1] => stdClass Object 
     (
      [id] => 987 
      [alias] => dave 
     ) 

    [2] => stdClass Object 
     (
      [id] => 123 
      [alias] => mike 
     ) 

    [3] => stdClass Object 
     (
      [id] => 789 
      [alias] => zeke 
     ) 
) 

Z góry dzięki!

Odpowiedz

8

Użyj usort(). Użytkownik określa funkcję, aby wykonać to porównanie, a sortowanie odbywa się w oparciu o funkcję. Np .:

function my_comparison($a, $b) { 
    return strcmp($a->alias, $b->alias); 
} 

$arr = ...; 

usort($arr, 'my_comparison'); 
+0

Co zrobić, aby posortować według markami następnie kategorię do tablicy obiektu produktu? – tom10271

2

myślę kolejność brakuje, Znalazłem ten other function

<?php 
/** 
* Sort array of objects by field. 
* 
* @autor Lea Hayes 
* @param array $objects Array of objects to sort. 
* @param string $on Name of field. 
* @param string $order (ASC|DESC) 
*/ 
function sort_on_field(&$objects, $on, $order = 'ASC') { 
    $comparer = ($order === 'DESC') 
     ? "return -strcmp(\$a->{$on},\$b->{$on});" 
     : "return strcmp(\$a->{$on},\$b->{$on});"; 
    usort($objects, create_function('$a,$b', $comparer)); 
} 

$order = ($_GET['order'] === 'asc') ? 'ASC' : 'DESC'; 
sort_on_field($arr, 'alias', $order); 
+0

Wielkie dzięki! Pracował dla mnie –

Powiązane problemy