2011-10-06 46 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']; 
});