2012-05-07 1 views
41

Eventuali duplicati:
How can I sort arrays and data in PHP?
How do I sort a multidimensional array in php
PHP Sort Array By SubArray Value
PHP sort multidimensional array by valuePHP sorta di matrice in ordine alfabetico utilizzando un valore sottoarray

mia serie si presenta come:

Array(
    [0] => Array(
     [name] => Bill 
     [age] => 15 
    ), 
    [1] => Array(
     [name] => Nina 
     [age] => 21 
    ), 
    [2] => Array(
     [name] => Peter 
     [age] => 17 
    ) 
); 

Vorrei ordinarli in ordine alfabetico in base al loro nome. Ho visto PHP Sort Array By SubArray Value ma non è stato di grande aiuto. Qualche idea su come fare questo?

+2

La domanda che hai inserito contiene la risposta esatta di cui hai bisogno .. basta sostituire ''optionNumber'' con'' name'' nella funzione di confronto. Votare per chiudere come duplicato. Se c'è qualcosa nell'altra domanda che non capisci, per favore, chiedi specificamente a riguardo. –

+0

Non ho mai visto un array che abbia la stessa chiave per due valori. Probabilmente è per questo che l'ordinamento non funziona? – hakre

risposta

95

Qui è la vostra risposta e funziona al 100%, ho provato.

<?php 
$a = Array(
    1 => Array(
     'name' => 'Peter', 
     'age' => 17 
    ), 
    0 => Array(
     'name' => 'Nina', 
     'age' => 21 
    ), 
    2 => Array(
     'name' => 'Bill', 
     'age' => 15 
    ), 
); 
function compareByName($a, $b) { 
    return strcmp($a["name"], $b["name"]); 
} 
usort($a, 'compareByName'); 
/* The next line is used for debugging, comment or delete it after testing */ 
print_r($a); 
+12

Tutto in una riga: usort ($ array, funzione ($ a, $ b) {return strcmp ($ a ["nome"], $ b ["nome"]);}); – pmrotule

+4

@pmrotule: Solo per versione> PHP 5.3 – Mohit

+7

Vale la pena notare che strcmp è case-sensitve. Mi ci è voluto un po 'per capire perché l'ordinamento alfabetico non stava dando i risultati attesi. Ho modificato il codice sopra riportato per restituire quanto segue: return strcmp (strtolower ($ a ["nome"]), strtolower ($ b ["nome"])); – Andrew

9

usort è tuo amico:

function cmp($a, $b) 
{ 
     return strcmp($a["name"], $b["name"]); 
} 

usort($array, "cmp"); 
+0

grazie mille –