php如何写排序

php如何写排序
最新回答
紫南

2026-06-05 18:19:26

PHP 提供了多种内置函数用于数组排序,以下是详细说明及示例:

一、基础排序函数
  1. sort()

    按数组元素值升序排序(索引数组)。

    示例:$arr = [6, 4, 10, 3, 7];sort($arr);print_r($arr); // 输出:[3, 4, 6, 7, 10]

  2. rsort()

    按数组元素值降序排序(索引数组)。

    示例:$arr = [6, 4, 10, 3, 7];rsort($arr);print_r($arr); // 输出:[10, 7, 6, 4, 3]

  3. asort()

    按关联数组的值升序排序,保留键名。

    示例:$arr = ["a" => 10, "b" => 3, "c" => 7];asort($arr);print_r($arr); // 输出:["b" => 3, "c" => 7, "a" => 10]

  4. arsort()

    按关联数组的值降序排序,保留键名。

    示例:$arr = ["a" => 10, "b" => 3, "c" => 7];arsort($arr);print_r($arr); // 输出:["a" => 10, "c" => 7, "b" => 3]

  5. ksort()

    按关联数组的键升序排序,保留值。

    示例:$arr = ["b" => 3, "a" => 10, "c" => 7];ksort($arr);print_r($arr); // 输出:["a" => 10, "b" => 3, "c" => 7]

  6. krsort()

    按关联数组的键降序排序,保留值。

    示例:$arr = ["b" => 3, "a" => 10, "c" => 7];krsort($arr);print_r($arr); // 输出:["c" => 7, "b" => 3, "a" => 10]

二、自定义排序(usort)

当需要复杂排序逻辑时,使用 usort() 配合自定义比较函数:

  • 比较函数规则

    返回 0:元素相等。

    返回 1:第一个参数大于第二个。

    返回 -1:第一个参数小于第二个。

  • 示例:按字符串长度排序

    $arr = ["apple", "banana", "cherry"];function compare_length($a, $b) { return strlen($a) - strlen($b);}usort($arr, "compare_length");print_r($arr); // 输出:["apple", "banana", "cherry"](按长度升序)
  • 示例:降序排序

    $arr = [6, 4, 10, 3, 7];function compare_desc($a, $b) { return $b - $a; // 降序}usort($arr, "compare_desc");print_r($arr); // 输出:[10, 7, 6, 4, 3]
三、多维数组排序

使用 usort() 或 uasort()(保留键名)对多维数组排序:

$users = [ ["name" => "Alice", "age" => 25], ["name" => "Bob", "age" => 20]];function compare_age($a, $b) { return $a["age"] - $b["age"]; // 按年龄升序}usort($users, "compare_age");print_r($users);// 输出:[["name" => "Bob", "age" => 20], ["name" => "Alice", "age" => 25]]注意事项
  1. 索引重置:sort()/rsort() 会重置数字键名(从0开始),而 asort()/arsort() 会保留键名。
  2. 大小写敏感:字符串排序默认区分大小写(大写字母排在小写字母前)。
  3. 性能:内置函数通常比手动循环排序更高效。

通过灵活选择上述函数,可以满足大多数排序需求。