2010-10-26 12 views
20

Ich habe ein Array:Sortieren mehrdimensionales Array von bestimmten Schlüsseln

Array (
    [0] => stdClass Object (
     [user_id] => 1 
     [ID] => 1 
     [user_login] => admin 
     [display_name] => admin 
     [user_email] => [email protected] 
     [meta_value] => a:1:{s:13:\"administrator\";s:1:\"1\";} 
    ) 
    [1] => stdClass Object (
     [user_id] => 4 
     [ID] => 4 
     [user_login] => ungtinflytande 
     [display_name] => ungtinflytande 
     [user_email] => [email protected] 
     [meta_value] => a:1:{s:13:\"administrator\";s:1:\"1\";} 
    ) 
    [2] => stdClass Object (
     [user_id] => 5 
     [ID] => 5 
     [user_login] => inflytandepilot 
     [display_name] => inflytandepilot 
     [user_email] => [email protected] 
     [meta_value] => a:1:{s:6:\"author\";s:1:\"1\";} 
    ) 
    [3] => stdClass Object (
     [user_id] => 11 
     [ID] => 11 
     [user_login] => matsbohman 
     [display_name] => matsbohman 
     [user_email] => [email protected] 
     [meta_value] => a:1:{s:6:\"editor\";s:1:\"1\";} 
    ) 
    [4] => stdClass Object (
     [user_id] => 12 
     [ID] => 12 
     [user_login] => klarakviberg 
     [display_name] => klarakviberg 
     [user_email] => [email protected] 
     [meta_value] => a:1:{s:13:\"administrator\";s:1:\"1\";} 
    ) 
) 

... dass ich irgendwie durch den Schlüssel display_name will. Ich drucke es gerade so:

foreach ($blogusers as $bloguser) { 
    ... 
} 

Wie mache ich das?

Antwort

34

würden Sie verwenden usort() - http://php.net/usort

Mein Vorschlag wäre:

function cmp($a, $b) 
    { 
     return strcmp($a->display_name, $b->display_name); 
    } 

    usort($blogusers, "cmp"); 

    foreach ($blogusers as $bloguser) 
    { 
     ... 
+0

usort() ist der Weg, um sicher zu gehen. Ist strcmp die richtige Funktion, wenn man nach einem Float sortieren möchte? Meine Vermutung wäre separate Komparatoren Funktionen je nach Typ könnte eine gute Idee sein ... – jsh

11

Siehe usort: http://php.net/manual/en/function.usort.php

usort($array, "my_cmp"); 

function my_cmp($a, $b) { 
    if ($a->display_name == $b->display_name) { 
    return 0; 
    } 
    return ($a->display_name < $b->display_name) ? -1 : 1; 
} 
0

Werfen Sie einen Blick auf Artikel folgen. Es beschreibt, wie man usort() verwendet und beschreibt auch, wie man create_function() verwendet, so dass Sie einzelne Funktion verwenden können, um nach verschiedenen Feldern zu sortieren (mit der erforderlichen Richtung asc oder desc).

http://phpave.com/sorting-associative-array-specific-key/

1

Ihr Array sieht aus wie das Ergebnis einer Datenbankabfrage. Wenn dies der Fall ist, lassen Sie die Datenbank die Sortierung durchführen: Fügen Sie einfach an die Abfrage an.

6

Ich habe finden Sie Antwort auf https://joshtronic.com/2013/09/23/sorting-associative-array-specific-key/

function sortBy($field, &$array, $direction = 'asc') 
{ 
    usort($array, create_function('$a, $b', ' 
     $a = $a["' . $field . '"]; 
     $b = $b["' . $field . '"]; 

     if ($a == $b) 
     { 
      return 0; 
     } 

     return ($a ' . ($direction == 'desc' ? '>' : '<') .' $b) ? -1 : 1; 
    ')); 

    return true; 
} 

Und nun diese Funktion durch bestimmte Array-Schlüssel nennen.

$newArray = sortBy('display_name', $blogusers); 

Und wenn Art in asc/desc nur ein Argument hinzufügen,

sortBy('display_name', $blogusers, 'desc'); 
Verwandte Themen