array_column 是 php 5.5+ 用于从二维数组中提取指定列值的函数,支持单列提取、键值映射及链式处理,兼具简洁性与实用性。

array_column 是 PHP 中一个非常实用的内置函数,特别适合从多维数组(比如数据库查询结果、API 返回的列表)中提取某一列的值,省去手动遍历的麻烦。它简洁、高效,是处理列表数据时的常用利器。
快速提取某字段构成新数组
最常见的用法是从二维数组中按键名提取一列。比如用户列表中只想要所有用户的邮箱:
$users = [ ['id' => 1, 'name' => '张三', 'email' => 'zhang@example.com'], ['id' => 2, 'name' => '李四', 'email' => 'li@example.com'], ['id' => 3, 'name' => '王五', 'email' => 'wang@example.com'] ]; $emails = array_column($users, 'email'); // 结果:['zhang@example.com', 'li@example.com', 'wang@example.com']
用第一列作键,另一列作值(构建映射表)
传入三个参数时,array_column 可以生成“键-值”形式的关联数组,非常适合做 ID → 名称、状态码 → 描述等映射:
$statuses = [ ['code' => 200, 'desc' => '成功'], ['code' => 404, 'desc' => '未找到'], ['code' => 500, 'desc' => '服务器错误'] ]; $map = array_column($statuses, 'desc', 'code'); // 结果:[200 => '成功', 404 => '未找到', 500 => '服务器错误']
- 第三个参数是键名(key),第二个是值(value),顺序不能颠倒
- 若多个子数组有相同 key 值,后面的会覆盖前面的
- 常用于下拉选项生成、状态翻译、缓存预加载等场景
配合其他函数做链式处理
array_column 经常与 array_unique、array_filter、array_map 等组合使用,让列表处理更灵活:
立即学习“PHP免费学习笔记(深入)”;
- 去重提取所有部门名称:
array_unique(array_column($employees, 'dept')) - 过滤后取 ID 列:
array_column(array_filter($orders, fn($o) => $o['status'] === 'paid'), 'id') - 转换并格式化邮箱:
array_map('strtolower', array_column($users, 'email'))
这种写法避免了冗长的 foreach,代码更紧凑、可读性更强。
注意兼容性与边界情况
array_column 自 PHP 5.5.0 起可用,7.0+ 支持对对象数组操作(需实现 ArrayAccess 或通过 get_object_vars 转换)。使用时需留意:
- 输入不是二维数组(如一维或 null)会返回空数组,不报错但可能掩盖逻辑问题
- 键名区分大小写,
'Email'和'email'视为不同键 - 若想安全提取,建议先用
is_array()和isset()做基础校验