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

eri*_*ktm 4 php multidimensional-array

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

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

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

joh*_*ist 7

尝试使用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);
?>
Run Code Online (Sandbox Code Playgroud)

打印:

Array
(
   [Bob] => Array
   (
      [count] => 15
      [changes] => 5
   )
   [John] => Array
   (
      [count] => 10
      [changes] => 1
   )
   [Martin] => Array
   (
      [count] => 5
      [changes] => 5
   )
)
Run Code Online (Sandbox Code Playgroud)


Dog*_*ert 6

你应该用uasort它.

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

此函数使用用户定义的比较函数对数组进行排序,以使数组索引与它们关联的数组元素保持相关性.这主要用于排序实际元素顺序很重要的关联数组.