PHP中的数组(排序)

sort

对数组排序

$arr = [1,5,4,3,8];
sort($arr);
print_r($arr);

Array
(
    [0] => 1
    [1] => 3
    [2] => 4
    [3] => 5
    [4] => 8
)

$arr = ['aaa','ddd','bbb','eee','ccc'];
sort($arr);
print_r($arr);

Array
(
    [0] => aaa
    [1] => bbb
    [2] => ccc
    [3] => ddd
    [4] => eee
)

rsort

对数组逆向排序

$arr = [1,5,4,3,8];
rsort($arr);
print_r($arr);

Array
(
    [0] => 8
    [1] => 5
    [2] => 4
    [3] => 3
    [4] => 1
)

$arr = ['aaa','ddd','bbb','eee','ccc'];
rsort($arr);
print_r($arr);

Array
(
    [0] => eee
    [1] => ddd
    [2] => ccc
    [3] => bbb
    [4] => aaa
)

ksort

对数组按照键名排序

$arr = [
    1=>11,
    5=>2,
    3=>8,
    4=>6,
    9=>3
];
ksort($arr);
print_r($arr);

Array
(
    [1] => 11
    [3] => 8
    [4] => 6
    [5] => 2
    [9] => 3
)

krsort

对数组按照键名逆向排序

$arr = [
    1=>11,
    5=>2,
    3=>8,
    4=>6,
    9=>3
];
krsort($arr);
print_r($arr);

Array
(
    [9] => 3
    [5] => 2
    [4] => 6
    [3] => 8
    [1] => 11
)

asort

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

$arr = [
    1=>11,
    5=>2,
    3=>8,
    4=>6,
    9=>3
];
asort($arr);
print_r($arr);

Array
(
    [5] => 2
    [9] => 3
    [4] => 6
    [3] => 8
    [1] => 11
)

arsort

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

$arr = [
    1=>11,
    5=>2,
    3=>8,
    4=>6,
    9=>3
];
arsort($arr);
print_r($arr);

Array
(
    [1] => 11
    [3] => 8
    [4] => 6
    [9] => 3
    [5] => 2
)

usort

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

function compare_func($a, $b)
{
    $a = abs($a);
    $b = abs($b);

    if($a==$b)
        return 0;
    return $a>$b?1:-1;
}
$arr = [
    1=>-11,
    5=>2,
    3=>8,
    4=>6,
    9=>-3
];
usort($arr, 'compare_func');
print_r($arr);

Array
(
    [0] => 2
    [1] => -3
    [2] => 6
    [3] => 8
    [4] => -11
)

uksort

使用用户自定义的比较函数对数组中的键名进行排序

function compare_func($a, $b)
{
    $a = abs($a);
    $b = abs($b);

    if($a==$b)
        return 0;
    return $a>$b?1:-1;
}

$arr = [
    1=>11,
    -5=>2,
    3=>8,
    4=>6,
    -9=>3
];
uksort($arr, 'compare_func');
print_r($arr);

Array
(
    [1] => 11
    [3] => 8
    [4] => 6
    [-5] => 2
    [-9] => 3
)

uasort

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

function compare_func($a, $b)
{
    $a = abs($a);
    $b = abs($b);

    if($a==$b)
        return 0;
    return $a>$b?1:-1;
}

$arr = [
    1=>-11,
    5=>2,
    3=>8,
    4=>6,
    9=>-3
];
uasort($arr, 'compare_func');
print_r($arr);

Array
(
    [5] => 2
    [9] => -3
    [4] => 6
    [3] => 8
    [1] => -11
)

natsort

用“自然排序”算法对数组排序

本函数实现了一个和人们通常对字母数字字符串进行排序的方法一样的排序算法并保持原有键/值的关联,这被称为”自然排序”。本算法和通常的计算机字符串排序算法(用于 sort())的区别见下面示例。

$array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png");
asort($array1);
print_r($array1);
natsort($array2);
print_r($array2);

Array
(
    [3] => img1.png
    [1] => img10.png
    [0] => img12.png
    [2] => img2.png
)
Array
(
    [3] => img1.png
    [2] => img2.png
    [1] => img10.png
    [0] => img12.png
)

natcasesort

用“自然排序”算法对数组进行不区分大小写字母的排序

$array1 = $array2 = array('IMG0.png', 'img12.png', 'img10.png', 'img2.png', 'img1.png', 'IMG3.png');
sort($array1);
print_r($array1);
natcasesort($array2);
print_r($array2);

Array
(
    [0] => IMG0.png
    [1] => IMG3.png
    [2] => img1.png
    [3] => img10.png
    [4] => img12.png
    [5] => img2.png
)
Array
(
    [0] => IMG0.png
    [4] => img1.png
    [3] => img2.png
    [5] => IMG3.png
    [2] => img10.png
    [1] => img12.png
)

array_multisort

对多个数组或多维数组进行排序

关联(string)键名保持不变,但数字键名会被重新索引。

$ar1 = array(10, 100, 100, 0);
$ar2 = array(1, 3, 2, 4);
array_multisort($ar1, $ar2);
print_r($ar1);
print_r($ar2);


Array
(
    [0] => 0
    [1] => 10
    [2] => 100
    [3] => 100
)
Array
(
    [0] => 4
    [1] => 1
    [2] => 2
    [3] => 3
)

ar1 ar2也被排序了。

参考

  • PHP手册
发布了94 篇原创文章 · 获赞 110 · 访问量 80万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章