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



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

大堆([Eerik]=>阵列([计数]=>10[更改]=>1)[Morten]=>阵列([计数]=>8[更改]=>1))

现在,数组中的键是我们帮助台系统中技术人员的姓名。我试图根据[count][changes]的数量对其进行排序,然后显示它们。我尝试过使用usort,但是数组键被索引号取代了。如何排序并保留数组键?

尝试使用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
   )
)

您应该使用uasort

bool-uasort(array&$array,回调$cmp_function(

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

我认为您应该使用uasort,它可以完全执行您想要的操作(对包含键的关联数组进行排序(

使用这个.我认为它可以

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

这应该可以满足您的需要:

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

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

相关内容

  • 没有找到相关文章

最新更新