array_column可直接从二维数组或对象数组中提取指定列生成一维数组;支持PHP 5.5+,7.0+兼容对象,8.0+支持传null获取键名列表;需注意键唯一性、属性可见性及数据类型统一。

array_column 提取指定列生成一维数组
直接用 array_column 就能从二维数组中抽一列出来变成一维数组,不用写循环。它原生支持 PHP 5.5+,PHP 7.0+ 还能传对象数组。
常见写法:array_column($array, 'key_name') —— 第二个参数是你要提取的键名(字符串),返回所有子数组里该键对应的值组成的索引数组。
- 如果二维数组是关联形式(比如数据库查询结果),
'id'、'name'这类键名直接填进去就行 - 如果想提取数字索引列(比如第 0 列),第二个参数填
0,不是'0' - 如果某行缺失该键,对应位置会是
NULL,不会跳过也不会报错
带索引键的 array_column:用第三个参数当新键名
默认返回的是纯数值索引数组,但有时你需要用某列做键、另一列做值,比如把 ['id' => 1, 'name' => 'Tom'] 转成 [1 => 'Tom'],这时候得用第三个参数:
array_column($array, 'name', 'id') —— 第二个参数是「值」,第三个是「键」。顺序不能反,反了就全变成 NULL 或空数组。
立即学习“PHP免费学习笔记(深入)”;
- 第三个参数的值必须唯一,否则后出现的会覆盖前面的
- 如果某个子数组没有第三个参数指定的键,那一行会被整个忽略(不报错,也不留空位)
- PHP 8.0+ 支持传
null作为第二个参数,只提取键不取值,得到一个键名列表
array_column 处理对象数组的注意事项
传对象数组进去时,array_column 默认按 public 属性取值,不支持 protected/private,也不能自动调用 getter 方法。
- 对象必须有对应名称的 public 属性,比如要取
->name,就得有public $name; - 如果属性是通过
__get()动态提供的,array_column拿不到,得先用array_map转成关联数组再操作 - 混用对象和数组的二维结构会导致部分元素失效,建议统一数据类型再处理
替代方案:兼容低版本 PHP 或复杂逻辑时怎么绕过 array_column
PHP array_column,或者你想在提取同时做类型转换、过滤、默认值填充,就得手动遍历。
最简等效写法:
$result = [];
foreach ($array as $item) {
$result[] = $item['name'] ?? null;
}
- 用
??可避免Notice: Undefined index - 如果要保留原始键(比如数据库里的主键 ID),改用
$result[$item['id']] = $item['name'] ?? ''; -
array_map+ 匿名函数也行,但可读性不如 foreach,且无法优雅处理缺失键
array_column 返回空数组却查不出错的高频原因。











