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']
- 第二个参数是你要提取的键名(字符串),必须存在,否则返回空数组
- 如果原数组中某些子数组不含该键,对应位置会得到 NULL,不会报错
- 支持数字索引和字符串键名,也适用于对象数组(需先转为关联数组)
用第一列作键,另一列作值(构建映射表)
传入三个参数时,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 + mysql 驱动的在线商城系统,我们的目标为中国的中小企业及个人提供最简洁,最安全,最高效的在线商城解决方案,使用了自建的会员积分折扣功能,不同的会员组有不同的折扣,让您的商店吸引更多的后续客户。 系统自动加分处理功能,自动处理会员等级,免去人工处理的工作量,让您的商店运作起来更方便省事 采用了自建的直接模板技术,免去了模板解析时间,提高了代码利用效率 独立开发的购物车系统,使用最
立即学习“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()做基础校验










