php二维转一维只取某列_php二维取列转一维array_column【技巧】
技术百科
絕刀狂花
发布时间:2026-01-28
浏览: 次 array_column可直接提取二维数组指定列转一维数组,支持值提取和键值映射两种用法,但需注意PHP版本兼容、对象数组预处理、参数校验及性能优化。
array_column 用对了就能直接取列转一维
PHP 自带的 array_column 就是干这事的,不用手写循环或 array_map + array_keys 组合。它原生支持从二维数组中按键名提取一列,并返回纯一维索引数组。
常见错误是传错参数顺序,或者在 PHP 版本低于 5.5 时直接调用——会报 Call to undefined function array_column()。
-
array_column($input, 'name')→ 提取所有子数组的name值,保持原始顺序 -
array_column($input, 'score', 'id')→ 用id作新键,score作值,返回关联一维数组 - 如果某行缺失该列(如
'name'键不存在),对应位置值为null,不会跳过
PHP 5.4 及更老版本怎么安全替代
不能升级 PHP?别硬套 array_column,先检测函数是否存在,再 fallback 到手动遍历。注意别用 foreach + array_push,性能差且冗余。
- 推荐用
array_map:array_map(function($v) { return $v['name'] ?? null; }, $arr) - 若需兼容空值过滤,加个
array_filter:array_values(array_filter($result)) - 避免用
foreach手动赋值到新数组——易漏索引重排,尤其要保留原始顺序时
取

array_column 只处理数组,不支持对象。如果源数据是对象数组(比如 PDO::FETCH_OBJ 查询结果),直接传进去会返回空数组。
立即学习“PHP免费学习笔记(深入)”;
- 先用
array_map('get_object_vars', $objects)转成数组数组,再调array_column - 或者一步到位:
array_column(array_map('get_object_vars', $objects), 'title') - 若对象有 getter 方法(如
getTitle()),就不能靠get_object_vars,得用array_map显式调用方法
性能和内存要注意的点
大数组(比如上万行)下,array_column 是 C 实现,比纯 PHP 循环快 2–3 倍;但若同时做键映射(三个参数用法),内部会重建哈希表,内存占用略高。
- 只取值不重键(两参数):最快最省内存
- 用字符串键做新索引(三参数):注意键是否唯一,重复会覆盖
- 别在循环里反复调用
array_column处理同一数组——提前抽出来复用结果
真正容易被忽略的是:当列名本身是变量时,有人写成 array_column($arr, $key) 却没验证 $key 是否为合法字符串,导致静默返回空数组。建议加一层 is_string($key) && strlen($key) 校验。
# 的是
# 就能
# 不存在
# 两种
# 要注意
# 就不能
# 性能优化
# 不支持
# input
# 循环
# 对象
# 内存占用
# 字符串
# function
# NULL
# foreach
# php
# 遍历
# undefined
# 会报
# pdo
# strlen
# 这事
相关栏目:
<?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; ?>
】
相关推荐
- Python字符串处理进阶_切片方法解析【指导】
- windows如何禁用驱动程序强制签名_windo
- TestNG的testng.xml配置文件怎么写
- Win11怎么连接投影仪_Win11多显示器投屏设
- Win11怎样安装剪映专业版_Win11安装剪映教
- 如何使用Golang理解结构体指针方法接收者_Go
- Drupal 中 HTML 链接被重复转义导致渲染
- 如何在 Go 中比较自定义的数组类型(如 [20]
- 小程序里php怎么变mp4_小程序调用php生成m
- 如何使用Golang配置安全开发环境_防止敏感信息
- 如何在 IIS 上为 ASP.NET 6 应用排除
- Win10如何更改开机密码_Windows10登录
- Win11文件扩展名怎么显示 Win11查看文件后
- php485返回数据不完整怎么办_php485数据
- Win11怎么看电池循环次数_Win11笔记本电池
- Drupal 中渲染节点时出现 HTML 标签嵌套
- php控制舵机角度怎么调_php发送pwm信号控制
- Mac怎么设置鼠标滚动速度_Mac鼠标设置详细参数
- Win11怎么设置麦克风权限_允许应用访问Win1
- php下载安装后memory_limit怎么设置_
- Win10如何更改任务栏高度_Windows10解
- c++中如何计算坐标系中两点间距离_c++勾股定理
- 如何在 Go 中正确初始化结构体中的 map 字段
- php中常量能用::访问吗_类常量与作用域操作符使
- c++怎么设置线程优先级与cpu亲和性_c++ 多
- Go 语言标准库为何不提供泛型切片的 Contai
- Win11怎么关闭自动调节亮度 Win11禁用内容
- MAC怎么截图并快速编辑_MAC自带截图快捷键与标
- php会话怎么开启_session_start函数
- Windows蓝屏错误0x00000018怎么处理
- Win11玩游戏全屏闪退怎么办_Win11全屏优化
- Windows11怎么用“记事本”自动换行与编码
- Win11怎么关闭触摸键盘图标_Windows11
- c++怎么编写动态链接库dll_c++ __dec
- php485返回空数组怎么回事_php485数据接
- 如何使用Golang实现容器健康检查_监控和自动重
- Win11无法识别耳机怎么办_解决Win11插耳机
- 如何使用Golang实现文件加密_Golang c
- 如何关闭Win10自动更新更新_Win10系统自动
- php订单日志怎么在swoole写_php协程sw
- php8.4如何调用com组件_php8.4win
- 如何使用Golang管理模块版本_Golanggo
- Win11如何更改任务栏颜色 Win11自定义任务
- PythonPandas数据分析项目教程_时间序列
- Python函数缓存机制_lru_cache解析【
- 如何在Golang中理解指针比较_Golang地址
- Windows 11怎么更改锁屏超时时间_Wind
- Windows10怎么查看硬件信息_Windows
- Win10系统字体模糊怎么办_Windows10高
- Win11怎么查看激活状态_查询Windows 1

QQ客服