首页 / PHP 入门教程 / PHP 数组函数与排序

PHP 入门教程

PHP 数组函数与排序

本教程共 65 篇 · 第 14 篇 · 更新于 2026-07-24 · 约 4 分钟阅读

PHPPHP8数组函数数组排序数组操作usort

14. PHP 数组函数与排序

本节目标:掌握常用数组操作函数和多种排序方式。学完你能对数组进行增删改查和灵活排序。

14.1 常用数组函数

添加和删除元素

<?php
$arr = ["a", "b"];

// 尾部操作
array_push($arr, "c", "d");     // ["a", "b", "c", "d"]
$last = array_pop($arr);         // 删除并返回 "d"

// 头部操作
array_unshift($arr, "z");        // ["z", "a", "b", "c"]
$first = array_shift($arr);      // 删除并返回 "z"

// 更简单的写法
$arr[] = "e";  // 相当于 array_push,但更快
?>

查找元素

<?php
$fruits = ["apple", "banana", "orange"];

// 检查是否存在
if (in_array("banana", $fruits)) {
    echo "找到了香蕉";
}

// 查找键名
$key = array_search("banana", $fruits);  // 1

// 检查键是否存在
if (array_key_exists(1, $fruits)) {
    echo "索引 1 存在";
}
?>

数组切片与合并

<?php
$arr = ["a", "b", "c", "d", "e"];

// 截取片段
$slice = array_slice($arr, 1, 3);  // ["b", "c", "d"]

// 合并数组
$arr1 = [1, 2];
$arr2 = [3, 4];
$merged = array_merge($arr1, $arr2);  // [1, 2, 3, 4]

// 去重
$dup = [1, 2, 2, 3, 3, 3];
$unique = array_unique($dup);  // [1, 2, 3]
?>

键值操作

<?php
$assoc = ["name" => "张三", "age" => 25];

// 获取所有键
$keys = array_keys($assoc);      // ["name", "age"]

// 获取所有值
$values = array_values($assoc);  // ["张三", 25]

// 键值翻转
$flipped = array_flip($assoc);   // ["张三" => "name", 25 => "age"]

// 交换键值(注意:值必须能作为有效键)
?>

统计与计算

<?php
$nums = [10, 20, 30, 40];

echo count($nums);           // 4
echo array_sum($nums);       // 100
echo array_product($nums);   // 240000
echo max($nums);             // 40
echo min($nums);             // 10

// 统计每个值出现的次数
$scores = ["A", "B", "A", "C", "B", "A"];
$count = array_count_values($scores);
// ["A" => 3, "B" => 2, "C" => 1]
?>

14.2 数组排序函数

PHP 提供了多种排序函数,适用于不同场景:

按值排序(索引数组)

<?php
$nums = [3, 1, 4, 1, 5, 9, 2];

// 升序排序
sort($nums);
print_r($nums);  // [1, 1, 2, 3, 4, 5, 9]

// 降序排序
rsort($nums);
print_r($nums);  // [9, 5, 4, 3, 2, 1, 1]
?>

按键排序(关联数组)

<?php
$ages = ["张三" => 25, "李四" => 30, "王五" => 20];

// 按值升序
asort($ages);
print_r($ages);  // ["王五" => 20, "张三" => 25, "李四" => 30]

// 按值降序
arsort($ages);
print_r($ages);  // ["李四" => 30, "张三" => 25, "王五" => 20]

// 按键升序
ksort($ages);
print_r($ages);  // ["李四" => 30, "王五" => 20, "张三" => 25]

// 按键降序
krsort($ages);
print_r($ages);  // ["张三" => 25, "王五" => 20, "李四" => 30]
?>
Tip

所有排序函数都是原地排序,直接修改原数组,返回 true/false 表示是否成功。

自定义排序 usort

<?php
$users = [
    ["name" => "张三", "age" => 25],
    ["name" => "李四", "age" => 20],
    ["name" => "王五", "age" => 30]
];

// 按 age 升序排列
usort($users, function($a, $b) {
    return $a["age"] <=> $b["age"];  // 太空船运算符
});

print_r($users);
// 李四(20), 张三(25), 王五(30)
?>

14.3 排序函数速查表

函数排序依据保持键关联顺序
sort()否(重置为数字键)升序
rsort()降序
asort()升序
arsort()降序
ksort()升序
krsort()降序
usort()自定义自定义
uasort()自定义自定义
uksort()自定义键自定义

14.4 数组过滤与映射

<?php
$nums = [1, 2, 3, 4, 5, 6];

// array_filter:过滤元素
$evens = array_filter($nums, fn($n) => $n % 2 == 0);
// [2, 4, 6]

// array_map:映射转换
$squares = array_map(fn($n) => $n * $n, $nums);
// [1, 4, 9, 16, 25, 36]

// array_reduce:累积计算
$sum = array_reduce($nums, fn($carry, $n) => $carry + $n, 0);
// 21

// 组合使用
$result = array_map(
    fn($n) => $n * 2,
    array_filter($nums, fn($n) => $n > 2)
);
// 大于 2 的数乘以 2:[6, 8, 10, 12]
?>

14.5 数组交并差

<?php
$a = [1, 2, 3, 4];
$b = [3, 4, 5, 6];

// 交集
$intersect = array_intersect($a, $b);  // [3, 4]

// 差集(在 $a 中但不在 $b 中)
$diff = array_diff($a, $b);  // [1, 2]

// 并集(去重合并)
$union = array_unique(array_merge($a, $b));  // [1, 2, 3, 4, 5, 6]
?>

来源:参考了 w3cschool「PHP 数组排序」、runoob「PHP 数组排序」以及 php.net 官方文档,综合改写后所得。