数组函数 #
一、排序函数 #
1.1 sort - 升序排序 #
php
<?php
$numbers = [3, 1, 4, 1, 5, 9, 2, 6];
sort($numbers);
print_r($numbers);
$fruits = ['banana', 'apple', 'cherry'];
sort($fruits);
print_r($fruits);
1.2 rsort - 降序排序 #
php
<?php
$numbers = [3, 1, 4, 1, 5, 9, 2, 6];
rsort($numbers);
print_r($numbers);
1.3 asort - 按值升序(保留键) #
php
<?php
$user = ['a' => 3, 'b' => 1, 'c' => 2];
asort($user);
print_r($user);
1.4 arsort - 按值降序(保留键) #
php
<?php
$user = ['a' => 3, 'b' => 1, 'c' => 2];
arsort($user);
print_r($user);
1.5 ksort - 按键升序 #
php
<?php
$user = ['c' => 3, 'a' => 1, 'b' => 2];
ksort($user);
print_r($user);
1.6 krsort - 按键降序 #
php
<?php
$user = ['a' => 1, 'c' => 3, 'b' => 2];
krsort($user);
print_r($user);
1.7 usort - 自定义排序 #
php
<?php
$users = [
['name' => 'John', 'age' => 25],
['name' => 'Jane', 'age' => 30],
['name' => 'Bob', 'age' => 20]
];
usort($users, fn($a, $b) => $a['age'] <=> $b['age']);
print_r($users);
1.8 排序标志 #
php
<?php
$numbers = [1, 10, 2, 20];
sort($numbers, SORT_NUMERIC);
print_r($numbers);
$strings = ['img1.png', 'img10.png', 'img2.png'];
sort($strings, SORT_NATURAL);
print_r($strings);
二、查找函数 #
2.1 in_array - 检查值存在 #
php
<?php
$fruits = ['apple', 'banana', 'cherry'];
var_dump(in_array('banana', $fruits));
var_dump(in_array('Banana', $fruits));
var_dump(in_array('Banana', $fruits, true));
2.2 array_search - 查找键名 #
php
<?php
$fruits = ['apple', 'banana', 'cherry'];
$key = array_search('banana', $fruits);
echo $key;
$key = array_search('grape', $fruits);
var_dump($key);
2.3 array_keys - 获取所有键 #
php
<?php
$user = ['name' => 'John', 'age' => 25, 'city' => 'Beijing'];
$keys = array_keys($user);
print_r($keys);
$fruits = ['apple', 'banana', 'cherry', 'banana'];
$keys = array_keys($fruits, 'banana');
print_r($keys);
2.4 array_values - 获取所有值 #
php
<?php
$user = ['name' => 'John', 'age' => 25, 'city' => 'Beijing'];
$values = array_values($user);
print_r($values);
2.5 array_key_exists - 检查键存在 #
php
<?php
$user = ['name' => 'John', 'age' => 25];
var_dump(array_key_exists('name', $user));
var_dump(array_key_exists('city', $user));
三、过滤函数 #
3.1 array_filter - 过滤元素 #
php
<?php
$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$even = array_filter($numbers, fn($n) => $n % 2 === 0);
print_r($even);
$users = [
['name' => 'John', 'active' => true],
['name' => 'Jane', 'active' => false],
['name' => 'Bob', 'active' => true]
];
$active = array_filter($users, fn($u) => $u['active']);
print_r($active);
3.2 过滤空值 #
php
<?php
$data = [0, 1, '', 'hello', null, false, [], [1, 2]];
$filtered = array_filter($data);
print_r($filtered);
3.3 使用键过滤 #
php
<?php
$user = ['name' => 'John', 'age' => 25, 'password' => 'secret'];
$safe = array_filter(
$user,
fn($key) => $key !== 'password',
ARRAY_FILTER_USE_KEY
);
print_r($safe);
四、映射函数 #
4.1 array_map - 映射转换 #
php
<?php
$numbers = [1, 2, 3, 4, 5];
$squared = array_map(fn($n) => $n ** 2, $numbers);
print_r($squared);
$names = ['john', 'jane', 'bob'];
$upper = array_map('strtoupper', $names);
print_r($upper);
4.2 多数组映射 #
php
<?php
$a = [1, 2, 3];
$b = [10, 20, 30];
$sum = array_map(fn($x, $y) => $x + $y, $a, $b);
print_r($sum);
4.3 array_walk - 遍历修改 #
php
<?php
$user = ['name' => 'john', 'age' => 25];
array_walk($user, function(&$value, $key) {
if (is_string($value)) {
$value = ucfirst($value);
}
});
print_r($user);
五、归约函数 #
5.1 array_reduce - 归约 #
php
<?php
$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, fn($carry, $n) => $carry + $n, 0);
echo $sum;
$product = array_reduce($numbers, fn($carry, $n) => $carry * $n, 1);
echo $product;
5.2 构建关联数组 #
php
<?php
$users = [
['id' => 1, 'name' => 'John'],
['id' => 2, 'name' => 'Jane']
];
$map = array_reduce($users, function($carry, $user) {
$carry[$user['id']] = $user['name'];
return $carry;
}, []);
print_r($map);
六、集合操作 #
6.1 array_merge - 合并 #
php
<?php
$a = [1, 2, 3];
$b = [4, 5, 6];
$merged = array_merge($a, $b);
print_r($merged);
6.2 array_diff - 差集 #
php
<?php
$a = [1, 2, 3, 4, 5];
$b = [2, 4, 6];
$diff = array_diff($a, $b);
print_r($diff);
6.3 array_intersect - 交集 #
php
<?php
$a = [1, 2, 3, 4, 5];
$b = [2, 4, 6];
$intersect = array_intersect($a, $b);
print_r($intersect);
6.4 array_unique - 去重 #
php
<?php
$numbers = [1, 2, 2, 3, 3, 3, 4];
$unique = array_unique($numbers);
print_r($unique);
七、统计函数 #
7.1 count - 计数 #
php
<?php
$arr = [1, 2, 3, 4, 5];
echo count($arr);
$nested = [1, [2, 3], [4, [5, 6]]];
echo count($nested);
echo count($nested, COUNT_RECURSIVE);
7.2 array_sum - 求和 #
php
<?php
$numbers = [1, 2, 3, 4, 5];
echo array_sum($numbers);
$prices = ['price1' => 10, 'price2' => 20, 'price3' => 30];
echo array_sum($prices);
7.3 array_product - 求积 #
php
<?php
$numbers = [1, 2, 3, 4, 5];
echo array_product($numbers);
7.4 array_count_values - 统计频率 #
php
<?php
$fruits = ['apple', 'banana', 'apple', 'cherry', 'banana', 'apple'];
$counts = array_count_values($fruits);
print_r($counts);
八、实用函数 #
8.1 array_column - 提取列 #
php
<?php
$users = [
['id' => 1, 'name' => 'John', 'age' => 25],
['id' => 2, 'name' => 'Jane', 'age' => 30],
['id' => 3, 'name' => 'Bob', 'age' => 35]
];
$names = array_column($users, 'name');
print_r($names);
$idNameMap = array_column($users, 'name', 'id');
print_r($idNameMap);
8.2 array_flip - 键值互换 #
php
<?php
$fruits = ['apple', 'banana', 'cherry'];
$flipped = array_flip($fruits);
print_r($flipped);
8.3 array_reverse - 反转 #
php
<?php
$numbers = [1, 2, 3, 4, 5];
$reversed = array_reverse($numbers);
print_r($reversed);
$user = ['a' => 1, 'b' => 2, 'c' => 3];
$reversed = array_reverse($user, true);
print_r($reversed);
8.4 array_rand - 随机取键 #
php
<?php
$fruits = ['apple', 'banana', 'cherry', 'date', 'elderberry'];
$random = array_rand($fruits);
echo $fruits[$random];
$randoms = array_rand($fruits, 3);
print_r($randoms);
8.5 shuffle - 随机打乱 #
php
<?php
$numbers = [1, 2, 3, 4, 5];
shuffle($numbers);
print_r($numbers);
九、实际应用 #
9.1 数据分组 #
php
<?php
function groupBy(array $items, string $key): array
{
return array_reduce($items, function($carry, $item) use ($key) {
$groupKey = $item[$key];
$carry[$groupKey][] = $item;
return $carry;
}, []);
}
$orders = [
['id' => 1, 'status' => 'pending'],
['id' => 2, 'status' => 'completed'],
['id' => 3, 'status' => 'pending']
];
$grouped = groupBy($orders, 'status');
print_r($grouped);
9.2 数据转换 #
php
<?php
function pluck(array $items, string $key): array
{
return array_map(fn($item) => $item[$key], $items);
}
$users = [
['id' => 1, 'name' => 'John'],
['id' => 2, 'name' => 'Jane']
];
$names = pluck($users, 'name');
print_r($names);
9.3 分页 #
php
<?php
function paginate(array $items, int $page, int $perPage): array
{
$total = count($items);
$totalPages = ceil($total / $perPage);
$offset = ($page - 1) * $perPage;
return [
'data' => array_slice($items, $offset, $perPage),
'meta' => [
'total' => $total,
'per_page' => $perPage,
'current_page' => $page,
'total_pages' => $totalPages
]
];
}
十、总结 #
本章学习了:
- 排序函数:sort、asort、ksort、usort
- 查找函数:in_array、array_search
- 过滤函数:array_filter
- 映射函数:array_map、array_walk
- 归约函数:array_reduce
- 集合操作:array_merge、array_diff、array_intersect
- 统计函数:count、array_sum、array_count_values
- 实用函数:array_column、array_flip、array_reverse
下一章将学习多维数组。
最后更新:2026-03-26