提问者:小点点

在PHP中按键长度(值中的键长度)降序排序数组


我的问题是这个已经回答得很好的问题的延伸/变体:

有一个数组具有看起来是二进制的键:

    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'],
    ];

我需要这个数组按如下顺序排列:

    $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);
    });

但是。。。

。。。密钥长度已存储在值[0]中。 因此,在比较函数中不必使用strlen()

我曾尝试使用value[0]-相应地调整链接问题中给出的一些解决方案,但没有达到预期的结果。

有人能让我走上正轨吗?


共1个答案

匿名用户

uksort函数特别使用数组键,因此您的代码返回$A[0]; $B[0];仅比较0010101键的第一个符号。

你需要UASort。

    uasort($codeWords, function($a, $b) {
        return $b[0] - $a[0];
    });