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

    白俊遥博客

  • 相关阅读:
    Python基于正则表达式实现文件内容替换的方法
    python数据处理实战
    python数据处理实战
    Python命令行参数解析模块getopt使用实例
    Python命令行参数解析模块getopt使用实例
    python命令行参数解析OptionParser类用法实例
    vim中权限不足时不用退出而强制保存
    C++11 STL算法简介
    每天一个linux命令(6) ar命令
    mysql++ Query
  • 原文地址:https://www.cnblogs.com/shuaibai123/p/5353349.html
Copyright © 2011-2022 走看看