2012-03-26 12 views
7

Ich habe eine PHP-Array, das wie folgt aussieht:PHP Art 2d Array alphabetisch nach verschachtelten Wert

Array{ 
    [0] { 
     'id'  => '0', 
     'title' => 'foo', 
     'address' => '123 Somewhere', 
    } 
    [1] { 
     'id'  => '1', 
     'title' => 'bar', 
     'address' => '123 Nowhere', 
    } 
    [2] { 
     'id'  => '2', 
     'title' => 'barfoo', 
     'address' => '123 Elsewhere', 
    } 
    [3] { 
     'id'  => '3', 
     'title' => 'foobar', 
     'address' => '123 Whereabouts', 
    } 
} 

und ich möchte es sortieren durch die ‚title‘ Schlüssel in den verschachtelten Arrays wie folgt aussehen:

Array{ 
    [1] { 
     'id'  => '1', 
     'title' => 'bar', 
     'address' => '123 Nowhere', 
    } 
    [2] { 
     'id'  => '2', 
     'title' => 'barfoo', 
     'address' => '123 Elsewhere', 
    } 
    [0] { 
     'id'  => '0', 
     'title' => 'foo', 
     'address' => '123 Somewhere', 
    } 
    [3] { 
     'id'  => '3', 
     'title' => 'foobar', 
     'address' => '123 Whereabouts', 
    } 
} 

die erste Ebene wichtige Werte sind nicht wichtig, da ich über den verschachtelten Schlüssel ‚id‘ Spur jeden verschachtelten Array zu halten.

Ich habe mit ksort() gespielt, aber ohne Erfolg.

+1

möglich Duplikat [PHP Art mehrdimensionales Array von Wert] (http://stackoverflow.com/questions/2699086/php-sort- multidimensional-array-by-value) –

Antwort

30

sollten Sie verwenden usort() (i PHP gehe davon aus 5.3+ hier):

usort($your_array, function ($elem1, $elem2) { 
    return strcmp($elem1['title'], $elem2['title']); 
}); 

Edit: hatte ich nicht bemerkt, wollte man die Verbindung zum Index erhalten, so dass Sie tatsächlich uasort() verwenden müssen stattdessen mit den gleichen Parametern.

Edit2: Hier ist die Pre-PHP 5.3 Version:

function compareElems($elem1, $elem2) { 
    return strcmp($elem1['title'], $elem2['title']); 
} 

uasort($your_array, "compareElems"); 
+1

Perfekt, genau das habe ich gebraucht. Es gibt ein paar alternative Lösungen zu SO, aber das scheint eleganter als die meisten (oder alle) von ihnen. – melat0nin

+0

Hmm habe gerade auf einen Server mit PHP <5.3 übertragen, also funktioniert die Embedded Funktion nicht .. Wie würde ich das umstellen um den gleichen Effekt mit der Funktion() außerhalb von uasort zu erreichen? – melat0nin