2011-10-06 53 views
-1

可能重複:
Sorting an associative array in PHP排序由值的數組在PHP

我有一個數組,看起來像下面的一個。我需要按點數從最高到最低排序。我已經嘗試了所有的排序功能,並且有些會帶來瘋狂的結果。

(
    [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

呀,你的問題出現了,因爲它是一個多維數組,數組排序功能只會影響最外層陣列。這個數組是如何創建的?它是硬編碼還是來自數據源,如數據庫或XML文件? –

+1

類似的問題已經提出*和*回答:[在PHP中排序關聯數組](http://stackoverflow.com/questions/777597/sorting-an-associative-array-in-php)。請下次使用搜索功能。請參閱[常見問題](http://stackoverflow.com/faq)。 – hakre

回答

2

見例#3在PHP手冊入門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

太複雜,USort更合適 –

+0

@MathieuDumoulin在這種情況下可能會稍微複雜一點,但這是一個有效的解決方案,它的構建起來更容易。 –

1

使用usort()

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