PHP Assoc Array пользовательская функция usort - PullRequest
0 голосов
/ 08 ноября 2018

Как мне отсортировать ключи в порядке убывания по их значению, и если два ключа имеют одинаковое количество, я должен распечатать их в алфавитном порядке. Я знаю, что, вероятно, должна быть создана пользовательская функция, но я не смог узнать, как ее создать.

Массив:

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

Выход:

fragments: 5
shards: 5
motes: 3

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете использовать пользовательскую функцию с 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 
)

Демонстрация на 3v4l.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...