PHP Assoc Array自定义usort函数

时间:2018-11-08 06:51:30

标签: php arrays sorting

如何按键值的降序对键进行排序,如果两个键的数量相同,则必须按字母顺序打印。我知道可能必须创建一个用户功能,但是我无法学习如何制作这些功能。

数组:

array(3) {
  ["motes"]=>
  int(3)
  ["shards"]=>
  int(5)
  ["fragments"]=>
  int(5)
}

输出:

fragments: 5
shards: 5
motes: 3

1 个答案:

答案 0 :(得分:1)

您可以将用户定义的函数与uksort配合使用以实现所需的功能。通过将数组也传递给函数,我们可以在对键进行排序之前对值进行作弊和排序:

$array = array('motes' => 3, 'shards' => 5, 'fragments' => 5);
uksort($array, function ($a, $b) use ($array) { 
    if ($array[$a] < $array[$b]) return 1;
    elseif ($array[$a] > $array[$b]) return -1; 
    else return strcmp($a, $b); });
print_r($array);

输出

Array ( 
    [fragments] => 5
    [shards] => 5
    [motes] => 3 
)

Demo on 3v4l.org