• PHP数组排序


    前言

    无论是在工作中还是在学习中,我们经常要对数组进行各种操作,包括但不限于数组的 过滤去重合并排序

    在我看来,在PHP中,我们用地最频繁的应该是数组了,数组的强大我就不多赘述了。

    排序

    PHP对数组进行排序 的函数对比

    实例#1 sort()

    对数组排序

    $data = [1,3,2,5,4];
    
    sort($data);  // [1,2,3,4,5]

    实例#2 rsort()

    对数组逆向排序

    $data = [1,3,2,5,4];
    
    rsort($data); // [5,4,3,2,1]

    实例#3 asort()

    对数组进行排序并保持索引关系

    (这里以索引数组举例,关联数组同理)

    $data = [1,3,2,5,4];
    
    asort($data);
    
    print_r($data);
    
    // output:
    
    Array
    (
       [0] => 1
       [2] => 2
       [1] => 3
       [4] => 4
       [3] => 5
    )

    实例#4 arsort()

    对数组进行逆向排序并保持索引关系

    (这里以索引数组举例,关联数组同理)

    $data = [1,3,2,5,4];
    
    arsort($data);
    
    print_r($data);
    
    // ourput:
    
    Array
    (
       [3] => 5
       [4] => 4
       [1] => 3
       [2] => 2
       [0] => 1
    )

    实例#5 ksort()

    对数组按照键名排序,主要用于关联数组。

    $data = ['a'=>1, 'c'=>3, 'b'=>2];
    
    ksort($data);
    
    print_r($data);
    
    // output:
    
    Array
    (
       [a] => 1
       [b] => 2
       [c] => 3
    )

    实例#6 krsort()

    对数组按照键名逆向排序

    $data = ['a'=>1, 'c'=>3, 'b'=>2];
    
    krsort($data);
    
    print_r($data);
    
    // output:
    
    Array
    (
       [c] => 3
       [b] => 2
       [a] => 1
    )

    实例#7 usort()

    使用用户自定义的比较函数对数组的值排序

    $data = [1,3,2];
    
    usort($data, function($a, $b){
        return $a <=> $b;
    });
    
    print_r($data);
    
    // output:
    
    Array
    (
       [0] => 1
       [1] => 2
       [2] => 3
    )
    $data = [
        [ 'fruit' => 'lemon' ],
        [ 'fruit' => 'apple' ],
        [ 'fruit' => 'banana' ],
    ];
    
    usort($data, function($a, $b){
        return strcmp($a['fruit'], $b['fruit']);
    });
    
    print_r($data);
    
    Array
    (
       [0] => Array
           (
               [fruit] => apple
           )
       [1] => Array
           (
               [fruit] => banana
           )
       [2] => Array
           (
               [fruit] => lemon
           )
    )

    实例#8 uasort()

    使用用户自定义的比较函数对数组的值进行排序并保持索引关系

    $fruits = [
        [ 'fruit' => 'lemons' ],
        [ 'fruit' => 'apples' ],
        [ 'fruit' => 'bananas' ],
    ];
    
    uasort($fruits, function($a, $b){
        return strcmp($a['fruit'], $b['fruit']);
    });
    
    print_r($fruits);
    
    // output:
    
    Array
    (
       [1] => Array
           (
               [fruit] => apples
           )
       [2] => Array
           (
               [fruit] => bananas
           )
       [0] => Array
           (
               [fruit] => lemons
           )
    )

    实例#9 usort() 使用闭包对多维数组排序

    $array = [
        ['key_a' => 'z', 'key_b' => 'c'],
        ['key_a' => 'x', 'key_b' => 'b'],
        ['key_a' => 'y', 'key_b' => 'a'],
    ];
    
    function build_sorter($key)
    {
        return function($a, $b) use ($key) {
            return strnatcmp($a[$key], $b[$key]);    
        };
    }
    
    usort($array, build_sorter('key_a'));
    
    print_r($array);
    
    // output:
    
    Array
    (
       [0] => Array
           (
               [key_a] => x
               [key_b] => b
           )
       [1] => Array
           (
               [key_a] => y
               [key_b] => a
           )
       [2] => Array
           (
               [key_a] => z
               [key_b] => c
           )
    )

    实例#10 shuffle() 

    打乱数组。该函数打乱(随机排列单元的顺序)一个数组。 它使用的是伪随机数产生器,并不适合密码学的场合。

    $numbers = range(1, 5);
    
    shuffle($numbers);
    
    print_r($numbers);
    
    // output
    
    Array
    (
       [0] => 5
       [1] => 3
       [2] => 2
       [3] => 1
       [4] => 4
    )

    实例#11 shuffle() 打乱数组并保持索引关系

    function shuffle_assoc(&$array)
    {
        $keys = array_keys($array);
        shuffle($keys);
        
        $new = [];
        
        foreach ( $keys as $key )
        {
            $new[$key] = $array[$key];
        }    
        
        $array = $new;
        
        return true;
    }
    
    $numbers = range(1, 5);
    
    shuffle_assoc($numbers);
    
    print_r($numbers);
    
    // output:
    
    Array
    (
       [2] => 3
       [3] => 4
       [0] => 1
       [4] => 5
       [1] => 2
    )

    参考

    PHP排序函数对比

     

  • 相关阅读:
    Android中的IMEI
    《JAVA与模式》之适配器模式(转)
    海量日志数据__怎么在海量数据中找出重复次数最多的一个
    Java中的IO流系统详解(转载)
    获取网络文件长度问题
    内存泄漏
    Ubuntu12.04不能连接小米开发(转)
    Java/C++中数组的区别
    Android批量插入数据到SQLite数据库
    泛型编程 基础
  • 原文地址:https://www.cnblogs.com/wgxi/p/14608609.html
Copyright © 2020-2023  润新知