2010-01-23 25 views
6

ich Probleme mit den Beispielen in dem PHP-Handbuch gehabt habe, so würde ich dies gerne hier fragen ...Sortieren Array von Objekten

Ich habe ein Array von Objekten .. Gibt es eine Möglichkeit zu sortieren Es basiert auf dem Inhalt des Objekts?

Zum Beispiel meine Array ist:

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 
     ) 
) 

Wie sortiere ich das Array von den [alias] der Objekte?

Im Beispiel sollte die Ausgabe sein:

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 
     ) 
) 

Vielen Dank im Voraus!

Antwort

8

Verwenden Sie usort(). Sie geben eine Funktion für diesen Vergleich an, und die Sortierung erfolgt anhand der Funktion. Z.B .:

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

$arr = ...; 

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

Was passiert, wenn ich von Markennamen dann Kategorie für eine Reihe von Produkt-Objekt sortieren müssen? – tom10271

2

Ich denke, die Ordnung fehlt, ich habe diese 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); 
gefunden
+0

Vielen Dank! Arbeitete für mich –

Verwandte Themen