数组函数 #

一、排序函数 #

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