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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章