php怎样用array_column二维转一维_phparray_column指定列转一维【步骤】
技术百科
絕刀狂花
发布时间:2026-01-25
浏览: 次 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 8.0+ 支持传
null作为第二个参数,只提取键不取值,得到一个键名列表
array_column 处理对象数组的注意事项
传对象数组进去时,array_column 默认按 public 属性取值,不支持 protected/p

- 对象必须有对应名称的 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 返回空数组却查不出错的高频原因。
# 的是
# 就能
# 也不
# 第三个
# 第二个
# 就得
# public
# 循环
# 对象
# 字符串
# 数据库
# 报错
# private
# NULL
# foreach
# 数据类型
# php
# 类型转换
# 组中
# protected
# undefined
# 转成
# Array
# 关联数组
# 键名
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Windows10如何更改开机密码_Win10登录
- MySQL 中使用 IF 和 CASE 实现查询字
- Python函数缓存机制_lru_cache解析【
- php能控制zigbee模块吗_php通过串口与c
- Win11怎么打开旧版计算器_Win11恢复传统计
- Win11怎么设置环境变量_Win11配置Path
- php485在php5.6下能用吗_php485旧
- Windows10电脑怎么连接蓝牙设备_Win10
- Go语言中slice追加操作的底层共享机制详解
- php删除数据怎么清空表_truncate与del
- Windows10系统怎么查看IP地址_Win10
- Windows7怎么找回经典开始菜单_Window
- PyTorch DDP 多进程训练在 Kaggle
- Win10怎么卸载剪映_Win10彻底卸载剪映方法
- Win11怎么关闭通知中心_Windows11系统
- C++中的协变与逆变是什么?C++函数指针与返回类
- Win11怎么开启剪贴板历史记录_Windows1
- Golang如何遍历目录文件_Golang fil
- Win11怎么更改计算机名_Windows11系统
- Win11如何隐藏桌面图标 Win11一键隐藏/显
- Mac如何彻底清理浏览器缓存?(Safari与Ch
- 如何使用Golang安装依赖库_管理模块和第三方包
- Go 语言标准库为何不提供泛型 Contains
- Windows10怎么备份注册表_Windows1
- 如何在Golang中优化文件读写性能_使用缓冲和并
- Win11怎样安装网易云音乐_Win11安装网易云
- c++20的std::format怎么用 比pri
- 如何在Golang中实现微服务服务拆分_Golan
- Win11怎么清理C盘虚拟内存_Win11清理虚拟
- php485读数据时阻塞怎么办_php485非阻塞
- Windows电脑如何截屏?(四种快捷方法)
- 如何在Golang中实现微服务负载均衡_Golan
- Win11怎样激活系统密钥_Win11系统密钥激活
- mac本地php环境如何开启curl_curl扩展
- Win11怎么设置快速访问_Windows11文件
- php订单日志怎么导出excel_php导出订单日
- Win11 C盘满了怎么清理 Win11磁盘清理和
- Python深度学习实战教程_神经网络模型构建与训
- 怎么将XML数据可视化 D3.js加载XML
- Python数据挖掘核心算法实践_聚类分类与特征工
- php转mp4怎么保留字幕_php处理带字幕视频转
- Go 语言标准库为何不提供泛型 Contains
- 如何使用Golang实现容器健康检查_监控和自动重
- Python邮件系统自动化教程_批量发送解析与模板
- c++ std::atomic如何保证原子性 c+
- Win10怎么卸载迅雷_Win10彻底卸载迅雷方法
- windows如何备份注册表_windows导出和
- Windows10如何更改鼠标图标_Win10鼠标
- 如何在包含多值的列中精准搜索指定演员?
- Windows11怎么用“记事本”自动换行与编码

QQ客服