2011-10-06 4 views
-1

Possible en double:
Sorting an associative array in PHPTri d'un tableau en PHP

J'ai un tableau qui ressemble à celui ci-dessous. J'ai besoin de le commander par les valeurs des points les plus élevés au plus bas. J'ai essayé toutes les fonctions de tri et certains ramènent des résultats fous.

(
    [0] => Array 
    (
    [name] => Shane Jones 
    [points] => 43 
) 
    [1] => Array 
    (
    [name] => Katie 'Kitty' Youd 
    [points] => 50 
) 
    [2] => Array 
    (
    [name] => Steve Bennett 
    [points] => 50 
) 
    [3] => Array 
    (
    [name] => Sharon Harvey 
    [points] => 99 
) 
    [4] => Array 
    (
    [name] => Sean Dentith 
    [points] => 50 
) 

) 
+1

Oui, votre problème se pose car il est un tableau multidimensionnel, et les fonctions de tri tableau n'affectera la plus extérieure tableau . Comment ce tableau est-il créé? Est-il codé en dur ou provient-il d'une source de données, disons une base de données ou un fichier XML? –

+1

Une question similaire a déjà été posée * et * a répondu: [Tri d'un tableau associatif en PHP] (http://stackoverflow.com/questions/777597/sorting-an-associative-array-in-php). Veuillez utiliser la fonction de recherche la prochaine fois. Voir la [FAQ] (http://stackoverflow.com/faq). – hakre

Répondre

2

Voir Exemple 3 dans l'entrée Manuel PHP pour array_multisort

<?php 
$data[] = array('volume' => 67, 'edition' => 2); 
$data[] = array('volume' => 86, 'edition' => 1); 
$data[] = array('volume' => 85, 'edition' => 6); 
$data[] = array('volume' => 98, 'edition' => 2); 
$data[] = array('volume' => 86, 'edition' => 6); 
$data[] = array('volume' => 67, 'edition' => 7); 

// Obtain a list of columns 
foreach ($data as $key => $row) { 
    $volume[$key] = $row['volume']; 
    $edition[$key] = $row['edition']; 
} 

// Sort the data with volume descending, edition ascending 
// Add $data as the last parameter, to sort by the common key 
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data); 
?> 
+0

Trop complexe, USort est plus approprié –

+0

@MathieuDumoulin Peut-être un peu plus complexe dans ce cas, mais c'est une solution valide et il est plus facile de construire dessus. –

1

Utilisez usort().

usort($data, function($a, $b) { 
    return $a['points'] - $b['points']; 
});