zoukankan      html  css  js  c++  java
  • 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;不然会有报错提示;

    白俊遥博客

  • 相关阅读:
    [转]pycharm的一些快捷键
    Python学习笔记(三十五)—内置模块(4)struct
    Python学习笔记(三十四)—内置模块(3)base64
    Python学习笔记(三十三)常用内置模块(2)collections_namedtuple_deque_defaultdict_OrderedDict_Counter
    Python学习笔记(三十二)常用内建模块(1)— datetime
    Python学习笔记(二十九)ThreadLocal
    使用Java代码发送SMTP邮件
    Python学习笔记(二十五)操作文件和目录
    Python学习笔记(二十)调试
    Python学习笔记(十八)@property
  • 原文地址:https://www.cnblogs.com/shuaibai123/p/5353349.html
Copyright © 2011-2022 走看看