• 二维数组重新排序


    PHP对一维数组排序,可能大家都很清楚,主要有以下几个:
    sort() 对数组排序
    rsort() 对数组逆向排序
    asort()  保持索引关系
    arsort() 逆向排序,并保持索引关系
    ksort() 按键名排序
    krsort() 按键名逆向排序
    usort() 使用用户自定义的函数对数组进行排序
    uksort() 使用用户自定义的函数对数组键名进行排序
    natsort() 用自然排序算法对数组排序
    natcasesort() 用自然排序算法对数组排序,不区分大小写
    如果是多维数组或者对多个数组排序的话,PHP也提供了一个函数:array_multisort()
    bool array_multisort ( array $ar1 [, mixed $arg [, mixed $... [, array $... ]]] ),成功返回true,失败返回false
    使用说明:

    关联(string)键名保持不变,但数字键名会被重新索引。 
    输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。——这句话是理解此函数用法的关键。

    第一个参数必须是一个数组。接下来的每个参数可以是数组或者是下面列出的排序标志。

    排序顺序标志: 
    ■SORT_ASC - 按照上升顺序排序 
    ■SORT_DESC - 按照下降顺序排序

    排序类型标志: 
    ■SORT_REGULAR - 将项目按照通常方法比较 
    ■SORT_NUMERIC - 将项目按照数值比较 
    ■SORT_STRING - 将项目按照字符串比较

    每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 - 在此之前为默认值 SORT_ASC 和 SORT_REGULAR。


    案例一:对多个数组进行排序

    1. /**
    2. * 多个数组排序
    3. */
    4. $arr1 = array(1,9,5);
    5. $arr2 = array(6,2,4);
    6. $arr3 = array(3,7,8);
    7. array_multisort($arr1,$arr2,$arr3);
    8. print_r($arr1);
    9. print_r($arr2);
    10. print_r($arr3);


    看以看到结果是:

    1. Array
    2. (
    3. [0] => 1
    4. [1] => 5
    5. [2] => 9
    6. )
    7. Array
    8. (
    9. [0] => 6
    10. [1] => 4
    11. [2] => 2
    12. )
    13. Array
    14. (
    15. [0] => 3
    16. [1] => 8
    17. [2] => 7
    18. )


    很明显,array_multisort会先按第一个数组(想像成列)排序,如果第一个数组(列)的值相同,则按第二个数组(列)排序,一次类推。(个人见解:第一个数组排序之后,根据第一个数组的键(原先的键)顺序排序之后的数组(之后的数组没定义排序的情况下))
    案例二:对多维数组排序(二维数组为例)

    1. /**
    2. * 多维数组排序
    3. */
    4. $arr = array(
    5. array('id'=>1,'data'=>'a'),
    6. array('id'=>3,'data'=>'c'),
    7. array('id'=>2,'data'=>'b'),
    8. array('id'=>2,'data'=>'a')
    9. );
    10. $id = $data = array();
    11. foreach($arr as $key => $value){
    12. $id[$key] = $value['id'];
    13. $data[$key] = $value['data'];
    14. }
    15. array_multisort($id, SORT_ASC, $data, SORT_DESC, $arr);
    16. print_r($arr);


    结果很显然:

    1. Array
    2. (
    3. [0] => Array
    4. (
    5. [id] => 1
    6. [data] => a
    7. )
    8.  
    9. [1] => Array
    10. (
    11. [id] => 2
    12. [data] => b
    13. )
    14.  
    15. [2] => Array
    16. (
    17. [id] => 2
    18. [data] => a
    19. )
    20.  
    21. [3] => Array
    22. (
    23. [id] => 3
    24. [data] => c
    25. )
    26.  
    27. )


    你可以对array_multisort()稍稍封装下更好用,如我:
     

    
    
    1. function sort_array($array, $keyid, $order='asc', $type='number') {
    2. if(is_array($array)) {
    3. foreach($array as $val) {
    4. $order_arr[] = $val[$keyid];
    5. }
    6. $order = ($order == 'asc') ? SORT_ASC: SORT_DESC;
    7. $type = ($type == 'number') ? SORT_NUMERIC: SORT_STRING;
    8. array_multisort($order_arr, $order, $type, $array);
    9. }
    10. }
  • 相关阅读:
    mySQL远程访问
    PHP安装amqp操作记录
    storm与daemontools安装详解
    centos时间同步问题
    nf_conntrack: table full, dropping packet 解决
    rabbitmq主从搭建
    jsonp
    django 整理二
    django中表单验证
    ajax
  • 原文地址:https://www.cnblogs.com/yaradish/p/10121539.html
Copyright © 2020-2023  润新知