php多维数组自定义排序 uasort()

php内置的排序函数很多;正反各种排;
常用的排序函数:
sort() - 以升序对数组排序
rsort() - 以降序对数组排序
asort() - 根据值,以升序对关联数组进行排序
ksort() - 根据键,以升序对关联数组进行排序
arsort() - 根据值,以降序对关联数组进行排序
krsort() - 根据键,以降序对关联数组进行排序
基本都能满足需求了;
关于这些函数的使用方法就不多啰嗦了;
但是在项目的实际开发中还是会有些更加苛刻的排序需求;今天要介绍的排序函数是: uasort()
uasort主要是用在需要按照自定义的方法并且保留索引关系多维数组的排序上;
有如下数组

$sort_array = array(
    "array1" => array(
        'word'=>'test1',
        'sortnumber'=>1,
    ),
    'array3'=>array(
        'word'=>'test4',
        'sortnumber'=>4,
    ),
    'array2'=>array(
        'word'=>'test3',
        'sortnumber'=>3,
    ),
    'array5'=>array(
        'word'=>'test5',
    ),
    'array4'=>array(
        'word'=>'test2',
        'sortnumber'=>2,
    ),
);

需求是按照sortnumber以升序的方式排序;
首先需要写一个自定义排序的规则;

// 自定义排序函数
function my_sort($a,$b){
    $prev = isset($a['sortnumber']) ? $a['sortnumber'] : 0;
    $next = isset($b['sortnumber']) ? $b['sortnumber'] : 0;
    if($prev == $next)return 0;
    return ($prev<$next) ? -1 : 1;
}
echo '<pre>排序前:<br>';
print_r($sort_array);
uasort($sort_array, "my_sort");
echo "排序后:<br>";
print_r ($sort_array);

得到的结果:

排序前:

Array
(
    [array1] => Array
        (
            [word] => test1
            [sortnumber] => 1
        )
    [array3] => Array
        (
            [word] => test4
            [sortnumber] => 4
        )
    [array2] => Array
        (
            [word] => test3
            [sortnumber] => 3
        )
    [array5] => Array
        (
            [word] => test5
        )
    [array4] => Array
        (
            [word] => test2
            [sortnumber] => 2
        )
)

排序后:

Array
(
    [array5] => Array
        (
            [word] => test5
        )
    [array1] => Array
        (
            [word] => test1
            [sortnumber] => 1
        )
    [array4] => Array
        (
            [word] => test2
            [sortnumber] => 2
        )
    [array2] => Array
        (
            [word] => test3
            [sortnumber] => 3
        )
    [array3] => Array
        (
            [word] => test4
            [sortnumber] => 4
        )
)

最后需要提醒的是:自定义的函数要使用isset检测下需要排序的字段是否存在如不存在赋个默认的0;
不然会有报错提示;
白俊遥博客

白俊遥博客
请先登录后发表评论
  • latest comments
  • 总共3条评论
白俊遥博客

侧耳倾听 :学习中

2019-01-17 17:56:21 回复

白俊遥博客

zyytest :受了你的启发:

2017-05-27 14:19:40 回复

白俊遥博客

NULL :请先登陆后发表评论

2016-01-23 02:59:44 回复