PHP: как отсортировать по длине ключа, затем по ключу как c? - PullRequest
0 голосов
/ 05 февраля 2020

Я нашел этот ответ , который работает для сортировки по длине ключа, но теперь мне нужно отсортировать по ключу как c без разрушения исходной сортировки.

Пример ввода:

$arr = ['a' => 'A', 'ddd' => 'D', 'ccc' => 'C', 'bb' => 'B'];

Пример вывода:

$arr = ['ccc' => 'C', 'ddd' => 'D', 'bb' => 'B', 'a' => 'A'];

Исходный массив:

a   => A
ddd => D
ccc => C
bb  => B

Сортировка по длине ключа сортирует их по длине в первую очередь (при сохранении самой длинной необходимости быть первым), вот так:

ddd => D
ccc => C
bb  => B
a   => A

Затем сортируйте по ключу, так как c изменит его следующим образом:

ccc => C
ddd => D
bb  => B
a   => A

Само собой разумеется, пара ключ / значение следует сохранить.

Как это сделать в PHP?

1 Ответ

2 голосов
/ 05 февраля 2020
uksort($array, function($key1, $key2) {
    $lengthMatch = strlen($key1) <=> strlen($key2);
    if ($lengthMatch) {
        return $lengthMatch;
    }
    return $key1 <=> $key2;
});

Объяснение:

uksort() сортирует массив по ключу, используя функцию во втором аргументе для определения порядка сортировки.

Функция сначала сравнивает длину ключа. Оператор <=> вернет -1 или 1 в зависимости от того, будет ли первое или второе значение больше или равно нулю, если они одинаковы. Алгоритм сортировки ожидает эти значения для сортировки.

if() вернет результат проверки длины, если они не совпадают по длине. Если они имеют одинаковую длину, мы проверяем фактическое значение ключей и вместо этого возвращаем результат этой проверки.

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