数组是 PHP 中最重要的数据结构,配置项、数据库查询结果、接口返回的数据,最终都以数组形式在代码里流转。这篇文章整理一组安全、常用的数组函数,每个都配一个可以直接运行的示例。

先认识:创建数组与 count()

<?php
$langs = ['PHP', 'Python', 'Go'];

echo count($langs);        // 输出:3
print_r($langs);           // Array ( [0] => PHP [1] => Python [2] => Go )

排序:sort()、asort() 与 ksort()

<?php
$nums = [3, 1, 4, 1, 5];
sort($nums);               // 按值升序,键会被重置
print_r($nums);            // [1, 1, 3, 4, 5]

$scores = ['php' => 90, 'python' => 95];
asort($scores);            // 按值排序,保留键值关系
print_r($scores);          // ['php' => 90, 'python' => 95]

ksort($scores);            // 按键名排序
print_r($scores);

记忆方法:后缀决定排序依据,a 开头按值排且保留键,k 开头按键名排。

查找:in_array() 与 array_search()

<?php
$langs = ['PHP', 'Python', 'Go'];

if (in_array('PHP', $langs)) {
    echo '找到 PHP';
}

$key = array_search('Go', $langs);   // 返回键名,找不到返回 false
echo $key;                           // 输出:2

过滤:array_filter()

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

$even = array_filter($nums, function ($n) {
    return $n % 2 === 0;
});
print_r($even);            // [1 => 2, 3 => 4, 5 => 6]

注意:array_filter() 会保留原来的键,需要重新索引时,再套一层 array_values()。

转换:array_map()

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

$withTax = array_map(function ($p) {
    return $p * 1.1;
}, $prices);

print_r($withTax);         // [11, 22, 33]

array_filter() 负责筛选,array_map() 负责逐个加工,两个函数配合使用非常顺手。

合并、去重与统计

<?php
$a = ['php', 'mysql'];
$b = ['linux', 'php'];

$all = array_merge($a, $b);
print_r($all);                       // ['php', 'mysql', 'linux', 'php']

print_r(array_unique($all));         // 去掉重复值
print_r(array_count_values($all));   // 统计每个值出现的次数

echo array_sum([1, 2, 3]);           // 输出:6

键与值的单独操作

<?php
$user = ['name' => 'Sherry', 'city' => 'Hangzhou'];

print_r(array_keys($user));      // ['name', 'city']
print_r(array_values($user));    // ['Sherry', 'Hangzhou']

if (array_key_exists('city', $user)) {
    echo '有城市信息';
}

echo $user['email'] ?? '未填写';  // 安全读取,避免 Undefined index

小结

  • 排序三件套:sort() 按值重置键、asort() 按值保留键、ksort() 按键名排
  • 筛选用 array_filter(),逐个加工用 array_map()
  • 合并去重:array_merge() + array_unique()
  • 读取数组时善用 array_key_exists() 和 ??,程序更健壮

这些都是纯数据操作函数,不涉及任何系统调用,放心使用。下一篇我们聊聊如何安全地处理表单数据。