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排序函数对比

 

原文地址:https://www.cnblogs.com/wgxi/p/14608609.html