zoukankan      html  css  js  c++  java
  • yii2 ArrayHelper的多维数组排序函数multisort

    你想让多维数组排序像SQL语句的order by 一样爽么,那就试试yii2的ArrayHelper::multisort,这货真的挺强大的。当然,PHP自己也有一个array_multisort(),不过今天,我们只说yii2。

    public static void multisort ( &$array, $key, $direction = SORT_ASC, $sortFlag = SORT_REGULAR )

    首先要知道这个函数应用场景是对二维数组按列排序,它不会返回一个新数组,这从第一个参数&$array我们就可以看出,传递的是这个数组的索引,执行函数后,原数组将会被改变。

    重点参数为$key,它接收3种形式

    第一种:字符串,该类型适合于采用一个列值排序

    /**
     * 我们对数组$arr按照id的大小进行降序排序
     */
    $arr = [
        0=>['id'=>1,'name'=>'abei'],
        1=>['id'=>2,'name'=>'li'],
        3=>['id'=>4,'name'=>'wb'],
        4=>['id'=>3,'name'=>'world']
    ];  
    
    ArrayHelper::multisort($arr,'id',SORT_DESC);
    var_dump($arr);
    
    //    获得结果为
    array (size=4)
      0 => 
        array (size=2)
          'id' => int 4
          'name' => string 'wb' (length=2)
      1 => 
        array (size=2)
          'id' => int 3
          'name' => string 'world' (length=5)
      2 => 
        array (size=2)
          'id' => int 2
          'name' => string 'li' (length=2)
      3 => 
        array (size=2)
          'id' => int 1
          'name' => string 'abei' (length=4)

    第二种:数组,该类型适合于对多个列值进行联合排序,当$key为数组时候,$direction如果为数组,且必须和$key数组长度一致,如果为字符串,则该字符串将作用于所有的$key.

    /**
     * 我们对数组$arr按照id的大小进行降序排序,然后对name进行生序排序
     */
    $arr = [
        0=>['id'=>1,'name'=>'abei'],
        1=>['id'=>1,'name'=>'li'],
        3=>['id'=>1,'name'=>'wb'],
        4=>['id'=>3,'name'=>'world']
    ];  
    
    ArrayHelper::multisort($arr,['id','name'],[SORT_DESC,SORT_ASC]);
    var_dump($arr);
    
    //    获得结果为
    array (size=4)
      0 => 
        array (size=2)
          'id' => int 3
          'name' => string 'world' (length=5)
      1 => 
        array (size=2)
          'id' => int 1
          'name' => string 'abei' (length=4)
      2 => 
        array (size=2)
          'id' => int 1
          'name' => string 'li' (length=2)
      3 => 
        array (size=2)
          'id' => int 1
          'name' => string 'wb' (length=2)

    第三种:自定义函数,当$key为一个函数时候,multisort将以这个函数的返回做作为排序的值,其他参数依旧。

    /**
     * 我们对数组$arr每一个子数组的id==1时,返回w,否则返回b,然后根据返回值进行降序排序
     */
    $arr = [
        0=>['id'=>1,'name'=>'abei'],
        1=>['id'=>1,'name'=>'li'],
        3=>['id'=>1,'name'=>'wb'],
        4=>['id'=>3,'name'=>'world']
    ];  
    
    
    ArrayHelper::multisort($arr,function($item){
        if($item['id'] == 1){
            return 'w';
        }else{
            return 'b';
        }
    },SORT_DESC);
    var_dump($arr);
    
    //    获得结果为
    array (size=4)
      0 => 
        array (size=2)
          'id' => int 1
          'name' => string 'abei' (length=4)
      1 => 
        array (size=2)
          'id' => int 1
          'name' => string 'li' (length=2)
      2 => 
        array (size=2)
          'id' => int 1
          'name' => string 'wb' (length=2)
      3 => 
        array (size=2)
          'id' => int 3
          'name' => string 'world' (length=5)

    第4个函数$sortFlag说明 $sortFlag共有6个值,详情可以参考 http://php.net/manual/en/function.sort.php, multisort将排序的值根据$sortFlag的设置转换类型后排序。

  • 相关阅读:
    Open source cryptocurrency exchange
    Salted Password Hashing
    95. Unique Binary Search Trees II
    714. Best Time to Buy and Sell Stock with Transaction Fee
    680. Valid Palindrome II
    Java compiler level does not match the version of the installed Java project facet.
    eclipse自动编译
    Exception in thread "main" java.lang.StackOverflowError(栈溢出)
    博客背景美化——动态雪花飘落
    java九九乘法表
  • 原文地址:https://www.cnblogs.com/-mrl/p/14075150.html
Copyright © 2011-2022 走看看