首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP中多维数组自定义排序uasort()

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

作者头像
沈唁
发布2018-05-24 16:03:16
2.4K0
发布2018-05-24 16:03:16
举报
文章被收录于专栏:沈唁志沈唁志

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,不然会有报错提示。

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:PHP中多维数组自定义排序uasort()

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档