PHP - 按密钥长度排序哈希数组

Gra*_*ant 12 php arrays sorting key

我找到了一些按值排序的答案,但不是关键.

我想做的是反向排序,所以:

    $nametocode['reallylongname']='12';
    $nametocode['shortname']='10';
    $nametocode['mediumname']='11';
Run Code Online (Sandbox Code Playgroud)

我希望他们按此顺序排列

  1. reallylongname
  2. mediumname
  3. 简称

中名短名

非常感谢

Gum*_*mbo 24

另一种解决方案array_multisort:

$keys = array_map('strlen', array_keys($arr));
array_multisort($keys, SORT_DESC, $arr);
Run Code Online (Sandbox Code Playgroud)

$keys是一个键的长度数组$arr.该数组按降序排序,然后用于对$arr使用的值进行排序array_multisort.


the*_*iko 8

您可以使用用户定义的键排序功能作为回调uksort:

function cmp($a, $b)
{
    if (strlen($a) == strlen($b))
        return 0;
    if (strlen($a) > strlen($b))
        return 1;
    return -1;
}

uksort($nametocode, "cmp");

foreach ($nametocode as $key => $value) {
    echo "$key: $value\n";
}
Run Code Online (Sandbox Code Playgroud)

快速注意 - 反转排序只需切换"1"和"-1".


Col*_*ert 8

基于@thetaiko答案,更简单的回调:

function sortByLengthReverse($a, $b){
    return strlen($b) - strlen($a);
}

uksort($nametocode, "sortByLengthReverse");
Run Code Online (Sandbox Code Playgroud)

资源:


小智 5

看看我强大的内联方法。为子孙后代保护全球空间!

uksort($data, create_function('$a,$b', 'return strlen($a) < strlen($b);'));
Run Code Online (Sandbox Code Playgroud)


a1e*_*x07 1

看看uksort