PHP 教程:数组基础与常用排序方法详解

· PHP笔记 小技巧 数据结构 PHP 入门笔记 · 4 阅读 · 约 5 分钟

数组基础

数组是 PHP 中最常用的数据结构之一,可以在一个变量中存储多个值。

创建数组

// 索引数组
$fruits = array("苹果", "香蕉", "橘子");

// PHP 5.4+ 支持短语法
$fruits = ["苹果", "香蕉", "橘子"];

// 关联数组
$person = [
    "name" => "张三",
    "age"  => 25,
    "city" => "北京"
];

访问数组元素

echo $fruits[0];        // 苹果
echo $person["name"];   // 张三

遍历数组

// 遍历索引数组
foreach ($fruits as $fruit) {
    echo $fruit . "\n";
}

// 遍历关联数组
foreach ($person as $key => $value) {
    echo $key . " => " . $value . "\n";
}

常用排序函数

sort 与 rsort

sort() 按值升序排序,rsort() 按值降序排序,排序后会重新分配索引键。

$numbers = [3, 1, 4, 1, 5];
sort($numbers);    // [1, 1, 3, 4, 5]
rsort($numbers);   // [5, 4, 3, 1, 1]

注意:关联数组使用 sort() 会丢失原来的键。

asort 与 arsort

asort() 按值升序排序并保留键值关联,arsort() 为对应的降序版本,适合关联数组。

$age = ["张三" => 25, "李四" => 22, "王五" => 28];
asort($age);   // ["李四" => 22, "张三" => 25, "王五" => 28]
arsort($age);  // ["王五" => 28, "张三" => 25, "李四" => 22]

ksort 与 krsort

ksort() 按键名升序排序,krsort() 按键名降序排序,同样保留键值关联。

$age = ["c" => 3, "a" => 1, "b" => 2];
ksort($age);    // ["a" => 1, "b" => 2, "c" => 3]
krsort($age);   // ["c" => 3, "b" => 2, "a" => 1]

usort 自定义排序

当内置排序规则不满足需求时,可以用 usort() 传入回调函数自定义比较逻辑。

$people = [
    ["name" => "张三", "age" => 25],
    ["name" => "李四", "age" => 22],
    ["name" => "王五", "age" => 28]
];

// 按年龄升序
usort($people, function ($a, $b) {
    return $a["age"] <=> $b["age"];
});

<=> 是 PHP 7 引入的组合比较符,左边小于右边返回 -1,相等返回 0,大于返回 1。

排序函数对比

函数 排序依据 顺序 保留键
sort() 值 升序 否
rsort() 值 降序 否
asort() 值 升序 是
arsort() 值 降序 是
ksort() 键 升序 是
krsort() 键 降序 是
usort() 自定义 自定义 否

小结

  • 索引数组用 sort()、rsort() 即可,简单直接
  • 关联数组需要保留键值关系时,按值排用 asort() / arsort(),按键排用 ksort() / krsort()
  • 复杂排序逻辑交给 usort(),配合 => 写法非常简洁