PHP按项目数排序多维数组

Avi*_*ram 26 php arrays sorting

我有一个数组,如:

Array
(
    [DEF] => Array
        (
            [0] => Array
                (
                    [type] => 1
                    [id] => 1212
                    [name] => Jane Doe
                    [current] => 1
                )

            [1] => Array
                (
                    [type] => 1
                    [id] => 3123121
                    [name] => Door
                    [current] => 
                )
        )

    [ABC] => Array
        (
            [0] => Array
                (
                    [type] => 1
                    [id] => 1234
                    [name] => John Doe
                    [current] => 
                )
        )

    [WW] => Array
        (
            [0] => Array
                (
                    [type] => 1
                    [id] => 1212
                    [name] => Jane Doe
                    [current] => 1
                )

            [1] => Array
                (
                    [type] => 1
                    [id] => 3123121
                    [name] => Door
                    [current] => 
                )

            [2] => Array
                (
                    [type] => 1
                    [id] => 64646
                    [name] => Floor
                    [current] => 
                )
        )
)
Run Code Online (Sandbox Code Playgroud)

并且我想按内部数组项的数字(count())对这个数组进行排序(即大多数项目是第一个),所以我将拥有这个数组:

Array
(
    [WW] => Array
        (
            [0] => Array
                (
                    [type] => 1
                    [id] => 1212
                    [name] => Jane Doe
                    [current] => 1
                )

            [1] => Array
                (
                    [type] => 1
                    [id] => 3123121
                    [name] => Door
                    [current] => 
                )

            [2] => Array
                (
                    [type] => 1
                    [id] => 64646
                    [name] => Floor
                    [current] => 
                )
        )

    [DEF] => Array
        (
            [0] => Array
                (
                    [type] => 1
                    [id] => 1212
                    [name] => Jane Doe
                    [current] => 1
                )

            [1] => Array
                (
                    [type] => 1
                    [id] => 3123121
                    [name] => Door
                    [current] => 
                )
        )

    [ABC] => Array
        (
            [0] => Array
                (
                    [type] => 1
                    [id] => 1234
                    [name] => John Doe
                    [current] => 
                )
        )
)
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议一个有效的方法吗?谢谢.

Arn*_*anc 33

使用uksort:

uksort($array, function($a, $b) { return count($b) - count($a); });
Run Code Online (Sandbox Code Playgroud)

使用array_multisort:

array_multisort(array_map('count', $array), SORT_DESC, $array);
Run Code Online (Sandbox Code Playgroud)

PHP <5.3:

function sort_cb($a, $b) {
    return count($b) - count($a);
}
uksort($array, 'sort_cb');
Run Code Online (Sandbox Code Playgroud)

  • 你不应该使用PHP <5.3.0;) (3认同)
  • 不应该是[usort](http://de1.php.net/usort)而不是[uksort](http://de1.php.net/uksort)? (2认同)
  • `uksort` 按键排序。键不能是数组,计数不计算任何东西。`usort` 比较值,可以是数组。 (2认同)