使用子键值对PHP数组进行排序

时间:2011-07-04 10:20:31

标签: php multidimensional-array

我有一个看起来像这样的数组:

Array
(
    [Erik] => Array
    ( 
        [count] => 10
        [changes] => 1
    )
    [Morten] => Array
    (
        [count] => 8
        [changes] => 1
    )
)

现在,数组中的键是我们的Helpdesk系统中的技术人员名称。我正在尝试根据[count][changes]的数量对此进行排序,然后显示它们。我尝试使用usort,但数组键被索引号替换。如何对此进行排序并保留数组键?

5 个答案:

答案 0 :(得分:6)

您应该使用uasort

  

bool uasort(array& $ array,callback   $ cmp_function)

     

此函数对数组进行排序   数组索引维持他们的   与数组元素的相关性   他们与...联系在一起   用户定义的比较函数。   这主要用于排序时   关联数组所在的实际   元素顺序很重要。

答案 1 :(得分:6)

尝试使用uasort():

<?
function cmp($a, $b)
{
   return ($b['count'] + $b['changes']) - ($a['count'] + $a['changes']);
}

$arr = array(
   'John' => array('count' => 10, 'changes' => 1),
   'Martin' => array('count' => 5, 'changes' => 5),
   'Bob' => array('count' => 15, 'changes' => 5),
);

uasort($arr, "cmp");

print_r($arr);
?>

打印:

Array
(
   [Bob] => Array
   (
      [count] => 15
      [changes] => 5
   )
   [John] => Array
   (
      [count] => 10
      [changes] => 1
   )
   [Martin] => Array
   (
      [count] => 5
      [changes] => 5
   )
)

答案 2 :(得分:0)

我认为你应该使用uasort来完全按照自己的意愿行事(对键进行排序关联数组)

答案 3 :(得分:0)

这应该做你需要的:

uasort($array, create_function('$a, $b', 'return (array_sum($a) - array_sum($b));'));

使用array_sum()函数对数组进行排序,并维护键。

答案 4 :(得分:0)

使用this.i thin it works

function cmp($a, $b)
    {
        if ($a['count'] == $b['count']) {
            return 0;
        }
        return ($a['count'] > $b['count']) ? +1 : -1;
}

usort ( $array, 'cmp' );