我有一个看起来像这样的数组:
Array ( [Erik] => Array ( [count] => 10 [changes] => 1 ) [Morten] => Array ( [count] => 8 [changes] => 1 ) )
现在,数组中的键是我们的Helpdesk系统中的技术人员名称。我正在尝试根据[count]
加[changes]
的数量对此进行排序,然后显示它们。我尝试使用usort,但数组键被索引号替换。如何对此进行排序并保留数组键?
答案 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' );