前言
无论是在工作中还是在学习中,我们经常要对数组进行各种操作,包括但不限于数组的 过滤,去重,合并,排序。
在我看来,在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 )
参考