2012-05-07 3 views
41

Possible en double:
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 valuetri du tableau PHP en utilisant par ordre alphabétique une valeur sous-tableau

Mon tableau ressemble:

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

Je voudrais les trier par ordre alphabétique en fonction de leur nom. J'ai vu PHP Sort Array By SubArray Value mais cela n'a pas aidé beaucoup. Des idées pour ce faire?

+2

La question que vous avez liée contient la réponse exacte dont vous avez besoin. Remplacez simplement '' optionNumber'' par '' name'' dans la fonction de comparaison. Voter pour fermer en double. S'il y a quelque chose dans l'autre question que vous ne comprenez pas, posez-vous spécifiquement à ce sujet. –

+0

Je n'ai jamais vu un tableau qui a la même clé pour deux valeurs. Probablement c'est pourquoi le genre ne fonctionne pas? – hakre

Répondre

95

Voici votre réponse et il fonctionne à 100%, je l'ai testé.

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

Tout en une ligne: usort ($ tableau, fonction ($ a, $ b) {return strcmp ($ a ["nom"], $ b ["nom"]);}); – pmrotule

+4

@pmrotule: Seulement pour la version> PHP 5.3 – Mohit

+7

À noter que strcmp est sensible à la casse. Il m'a fallu du temps pour comprendre pourquoi trier par ordre alphabétique ne donnait pas les résultats escomptés. J'ai changé le code ci-dessus pour retourner ce qui suit: return strcmp (strtolower ($ a ["nom"]), strtolower ($ b ["nom"])); – Andrew

9

usort est votre ami:

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

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

merci beaucoup –

Questions connexes