Сортировать массив в порядке убывания по длине ключа (длина ключа в значении) в PHP - PullRequest
0 голосов
/ 12 июля 2020

Мой вопрос - это расширение / вариант этого уже хорошо известного вопроса :

Существует массив с двоичными ключами:

    codeWords = [
        '000111' => [6, 1, 0, 't'],
        '1110' => [4, 6, 0, 't'],
        '10011' => [5, 8, 0, 't'],
        '001000' => [6, 12, 0, 't'],
        '00110101' => [8, 0, 0, 't'],
        '010' => [3, 1, 1, 't'],
        '10' => [2, 3, 1, 't'],
        '011' => [3, 4, 1, 't'],
        '0010' => [4, 6, 1, 't'],
        '00011' => [5, 7, 1, 't'],
        '000101' => [6, 8, 1, 't'],
    ];

I нужен этот массив, упорядоченный следующим образом:

    $codeWords = [
        '00110101' => [8, 0, 0, 't'],
        '001000' => [6, 12, 0, 't'],
        '000111' => [6, 1, 0, 't'],
        '000101' => [6, 8, 1, 't'],
        '10011' => [5, 8, 0, 't'],
        '00011' => [5, 7, 1, 't'],
        '1110' => [4, 6, 0, 't'],
        '0010' => [4, 6, 1, 't'],
        '011' => [3, 4, 1, 't'],
        '010' => [3, 1, 1, 't'],
        '10' => [2, 3, 1, 't'],
    ];

Это решение работает нормально:

    uksort($codeWords, function($a, $b) {
        return strlen($a) < strlen($b);
    });

но ...

... длина ключа уже сохранена в value[0]. Следовательно, strlen() не нужно использовать в функции сравнения.

Я попытался адаптировать некоторые решения, приведенные в связанном вопросе, соответственно с использованием value[0], но не пришел к желаемому результат.

Может ли кто-нибудь направить меня на верный путь?

1 Ответ

1 голос
/ 12 июля 2020

Функция uksort специально использует ключи массива, и, таким образом, ваш код return $a[0] < $b[0]; сравнивает только первые символы ваших 0010101 ключей.

Вам нужно uasort .

    uasort($codeWords, function($a, $b) {
        return $b[0] - $a[0];
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...