数组基础
数组是 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(),配合=>写法非常简洁