本文共 3623 字,大约阅读时间需要 12 分钟。
PHP 提供了多种数组排序函数,允许开发者根据数组中的值或键对数组进行排序。以下是常用的 PHP 数组排序函数及其用法:
sort() 函数用于对数组进行升序排列。它会重新索引数组,并返回排序后的数组(原数组也会被改变)。
$fruits = array("lemon", "apple", "banana", "orange");sort($fruits);print_r($fruits); // 输出: Array ( [0] => apple [1] => banana [2] => lemon [3] => orange ) rsort() 函数与 sort() 类似,但它会对数组进行降序排序。
$fruits = array("lemon", "apple", "banana", "orange");rsort($fruits);print_r($fruits); // 输出: Array ( [0] => orange [1] => lemon [2] => banana [3] => apple ) asort() 函数对数组进行升序排序,但保持索引关系。它不会重新索引数组。
$prices = array("apple" => 2, "banana" => 1, "orange" => 3);asort($prices);print_r($prices); // 输出: Array ( [banana] => 1 [apple] => 2 [orange] => 3 ) ksort() 函数根据数组的键名进行升序排序。它会修改原数组并返回 TRUE。
$fruits = array("banana" => 1, "apple" => 2, "lemon" => 3);ksort($fruits);print_r($fruits); // 输出: Array ( [apple] => 2 [banana] => 1 [lemon] => 3 ) arsort() 函数与 asort() 类似,但它对数组进行降序排序。
$prices = array("apple" => 2, "banana" => 1, "orange" => 3);arsort($prices);print_r($prices); // 输出: Array ( [orange] => 3 [apple] => 2 [banana] => 1 ) krsort() 函数与 ksort() 类似,但它按照键名进行降序排序。
$fruits = array("banana" => 1, "apple" => 2, "lemon" => 3);krsort($fruits);print_r($fruits); // 输出: Array ( [lemon] => 3 [banana] => 1 [apple] => 2 ) usort() 函数使用用户自定义的比较函数对数组进行排序。
function compare($a, $b) { if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1;}$numbers = array(4, 2, 8, 6);usort($numbers, "compare");print_r($numbers); // 输出: Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 ) uasort() 函数与 usort() 类似,但它会保持索引关系。
function compareFruit($a, $b) { return strcmp($a['name'], $b['name']);}$fruits = array( array('name' => 'banana', 'calories' => 105), array('name' => 'apple', 'calories' => 52), array('name' => 'lemon', 'calories' => 20));uasort($fruits, "compareFruit");print_r($fruits); // 输出: Array ( [2] => Array ( [name] => lemon [calories] => 20 ) [1] => Array ( [name] => apple [calories] => 52 ) [0] => Array ( [name] => banana [calories] => 105 ) ) uksort() 函数按照键名对数组进行排序,使用用户自定义的比较函数。
function compareKeys($a, $b) { return strlen($a) - strlen($b);}$ages = array( 'Alice' => 30, 'Bob' => 25, 'Charlie' => 35, 'David' => 20);uksort($ages, "compareKeys");print_r($ages); // 输出: Array ( [David] => 20 [Bob] => 25 [Alice] => 30 [Charlie] => 35 ) natsort() 函数实现了“自然排序”,用于对字符串数组进行排序。
$numbers = array("img1.png", "img10.png", "img2.png", "img12.png");natsort($numbers);print_r($numbers); // 输出: Array ( [0] => img1.png [1] => img2.png [2] => img10.png [3] => img12.png ) natcasesort() 函数与 natsort() 类似,但它不区分大小写。
$fruits = array("apple", "Banana", "cherry", "Date", "apple10", "cherry2", "Banana5");natcasesort($fruits);print_r($fruits); // 输出: Array ( [0] => apple [1] => apple10 [2] => Banana [3] => Banana5 [4] => cherry [5] => cherry2 [6] => Date ) array_multisort() 函数可以对一个或多个数组进行排序,甚至可以对关联数组的键进行排序。
$names = array("John", "Bob", "Alice", "David");$scores = array(85, 92, 78, 92);array_multisort($scores, SORT_DESC, $names);for ($i = 0; $i < count($names); $i++) { echo "Name: " . $names[$i] . ", Score: " . $scores[$i] . "\n";} 输出将是:
Name: Bob, Score: 92Name: David, Score: 92Name: John, Score: 85Name: Alice, Score: 78
sort())会修改原始数组,而其他函数(如 asort())则会保留原始数组并返回一个新的排序数组。usort() 或 uasort() 函数,并定义适当的比较函数。sort())会重新索引键名,而其他函数(如 asort())则会保留原始键名。转载地址:http://krhfk.baihongyu.com/