标签 usort 下的文章

这个排序在网上直接搜索的结果有这样一个:

array_multisort(array_column($array,'sort'),SORT_ASC,$array);

这个是错误的。 切忌不要以讹传讹了。

分析排查 最终结果

分析排查

实际上array_multisort 是PHP内置的方法,官方有说明: PHP - array_multisort

array1
要排序的 array。

array1_sort_order
之前 array 参数要排列的顺序。 SORT_ASC 按照上升顺序排序, SORT_DESC 按照下降顺序排序。

此参数可以和 array1_sort_flags 互换,也可以完全删除,默认是 SORT_ASC 。

array1_sort_flags
为 array 参数设定选项:

排序类型标志:

SORT_REGULAR - 将项目按照通常方法比较(不修改类型)
SORT_NUMERIC - 按照数字大小比较
SORT_STRING - 按照字符串比较
SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。 它会使用 locale 信息,可以通过 setlocale() 修改此信息。
SORT_NATURAL - 以字符串的"自然排序",类似 natsort()
SORT_FLAG_CASE - 可以组合 (按位或 OR) SORT_STRING 或者 SORT_NATURAL 大小写不敏感的方式排序字符串。
参数可以和 array1_sort_order 交换或者省略,默认情况下是 SORT_REGULAR。

...
可选的选项,可提供更多数组,跟随在 sort order 和 sort flag 之后。 提供的数组和之前的数组要有相同数量的元素。 换言之,排序是按字典顺序排列的。

第一个参数是需要排序的数组

array_multisort( $array );

排序默认是 升序、按常规数字方式, 如果不需要则可以省略

array_multisort( $array ); // SORT_ASC, SORT_REGULAR
array_multisort( $array, SORT_DESC, SORT_NATURAL );

最后一个参数 排序参考, 这里的 参考也就是说 排序会按照最后这个数组的key来进行排序。

array_multisort( $array, $howToSort );
array_multisort( $array, SORT_DESC, SORT_NATURAL, $howToSort );

最后来一段demo

<?php
<?php

$menu = [
    [
        "id"=>1,
        "sort"=>100
    ],
    [
        "id"=>2,
        "sort"=>50
    ],
    [
        "id"=>3,
        "sort"=>60
    ]
];


$tmp = array_column($menu,'sort');
asort($tmp);

array_multisort($menu, $tmp );

print_r( $menu );
Array
(
    [0] => Array
        (
            [id] => 1
            [sort] => 100
        )

    [1] => Array
        (
            [id] => 2
            [sort] => 50
        )

    [2] => Array
        (
            [id] => 3
            [sort] => 60
        )

)

可以发现,用这样的方式无法实现我们目标。 因为我们进行key排序之后,tmp数组的key 又变成了 0,1,2....n 这样也就意味着作为参考数组,失去了参考价值。

如果非要用这个 array_multisort() 就需要处理 这个参考数组。相当麻烦: 这里贴一段PHP官网网友的实现: https://www.php.net/manual/zh/function.array-multisort.php#100534

- 阅读剩余部分 -