文档章节

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

白俊遥
 白俊遥
发布于 2016/04/04 23:18
字数 447
阅读 15
收藏 0

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

白俊遥博客


© 著作权归作者所有

白俊遥
粉丝 18
博文 58
码字总数 28701
作品 3
朝阳
程序员
私信 提问
php对二维数组进行相关操作(排序、转换、去空白等)

php对二维数组进行相关操作(排序、转换、去空白等) 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-11-04 这篇文章主要介绍了php对二维数组进行相关操作,包括php对二维数组排序、...

thinkyoung
2015/11/09
0
0
[讨论]php 排序系列的函数内部的C实现是用了哪种排序算法?

ext/standard/php_array.h https://github.com/php/php-src/blob/master/ext/standard/php_array.h 上面定义的排序函数: arsort -- 对数组进行逆向排序并保持索引关系 asort -- 对数组进行排...

justjavac
2013/08/16
180
1
PHP 数组函数-数组排序

php数组排序函数 sort ( &$arr [,fruits] ) 对数组进行从低到高排序 ,并赋予新的键名 返回bool rsort ( &$arr [,fruits] ) 对数组进行逆向排序 并赋予新的键名 asort ( &$arr [,fruits] ) ...

xinson
2014/11/03
25
0
PHP基础教程之数组函数大全整理

今天整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数、数组的分段和填充、数组与栈、数组与列队、回调函数、排序、计算、其他的数组函数共8个知识点,非常适合正在学习PHP的初学...

小懒人23
2016/05/19
27
0
PHP 函数 数组

一、自定义函数 自定义函数就是我们自己定义的函数,在PHP中自定义函数格式如下: function funname(arg1, arg2, arg3......){ //TODO return values; } 输出结果: 下面再举一个可变参数的函...

ufo00001
2017/06/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

kubernetes pod exec接口调用

正文 一般生产环境上由于网络安全策略,大多数端口是不能为集群外部访问的。多个集群之间一般都是通过k8s的ApiServer组件提供的接口通信,如https://192.168.1.101:6443。所以在做云平台时,...

码农实战
33分钟前
4
0
3_数组

3_数组

行者终成事
今天
8
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部