37 Stimmen

Mehrdimensionales Array nach einem bestimmten Schlüssel sortieren

Ich habe ein Array:

Array (
    [0] => stdClass Object (
        [user_id] => 1
        [ID] => 1
        [user_login] => admin
        [display_name] => admin
        [user_email] => webbinformation@nacka.se
        [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] => klarakviberg@gmail.com
        [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] => hildalundgren@hotmail.com
        [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] => mats.bohman@nacka.se
        [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] => nastasteg@nacka.se
        [meta_value] => a:1:{s:13:\"administrator\";s:1:\"1\";}
    )
)

...die ich nach dem display_name Taste. Derzeit drucke ich sie so:

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

Wie kann ich das tun?

47voto

Repox Punkte 14714

Sie würden usort() verwenden - 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)
    {
        ...

17voto

Mike C Punkte 1752

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;
}

10voto

Kishan Chauhan Punkte 1124

Ich habe die Antwort gefunden unter 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 rufen Sie diese Funktion mit einem bestimmten Array-Schlüssel auf.

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

Und wenn Sie nach asc/desc sortieren, fügen Sie einfach ein Argument hinzu,

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

0voto

ax. Punkte 56071

Ihr Array sieht aus wie das Ergebnis einer Datenbankabfrage. Wenn dies der Fall ist, lassen Sie die Datenbank die Sortierung übernehmen: fügen Sie einfach ORDER BY display_name auf die Abfrage.

-1voto

Shriganesh Shintre Punkte 2210

Schauen Sie sich den folgenden Artikel an. Darin wird beschrieben, wie man usort() und beschreibt auch, wie man create_function() damit Sie eine einzige Funktion zum Sortieren nach verschiedenen Feldern verwenden können (mit der erforderlichen Richtung asc o desc ).

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X