PHP 多维数组处理利器:array_column() 用法详解

在日常 PHP 开发中,处理多维数组是非常常见的需求。例如,从数据库查询结果中提取某一列数据,或整理接口返回的嵌套数组等。array_column() 函数正是为此而生------它能用极简的代码从多维数组中提取单列值,极大简化数组操作逻辑。

一、array_column() 函数简介

  1. 函数作用

array_column() 是 PHP 5.5.0 及以上版本内置的数组函数。它的核心功能是:

  • 从一个多维数组中返回指定单列的值
  • 支持自定义返回数组的键名
  • 避免手动循环遍历数组的繁琐代码
  1. 语法结构

array_column(array <math xmlns="http://www.w3.org/1998/Math/MathML"> a r r a y , i n t ∣ s t r i n g ∣ n u l l array, int|string|null </math>array,int∣string∣nullcolumn_key, int|string|null $index_key = null): array

  • $array(必需):待处理的多维数组
  • $column_key(必需):要提取的列的键名(字符串/数字),传 null 时返回整个数组(PHP7.0+ 支持)
  • $index_key(可选):用数组中某一列的值作为返回数组的键名,让结果数组更易按键取值

二、array_column() 基础实战实例

  1. 提取多维数组的单列值
php 复制代码
 $users = [
            ['id' => 1, 'name' => '张三', 'age' => 22 ],
            ['id' => 2, 'name' => '李四', 'age' => 25 ],
            ['id' => 3, 'name' => '王五', 'age' => 28],
        ];

// 提取所有用户的姓名列
        $userNames = array_column($users, 'name');

        print_r($userNames);

输出结果:

Array ( [0] => 张三 [1] => 李四 [2] => 王五 )

三、array_column() 在 ThinkPHP6 中的应用

ThinkPHP6 是国内主流的 PHP 框架,数据库查询(Db 类/模型)返回的结果集多为数组或对象数组,array_column() 能极大简化数据处理。

  1. 从模型查询结果中提取单列值

场景:获取指定用户关联的订单 ID 集合

php 复制代码
$orderList = Order::where('user_id', 1)->select()->toArray();
$orderIds = array_column($orderList, 'id');
  1. 提取数据并定义键名,用于关联查询

场景:获取用户列表,并判断用户是否已下单

php 复制代码
// 模拟数据库查询返回的多维数组
$userList = User::select()->toArray();
$userIds = array_column($userList, 'id');

$orderList = Order::whereIn('user_id', $userIds)->select()->toArray();
$orderData = array_column($orderList, null, 'user_id');

foreach ($userList as $key => $user) {
    $user['has_order'] = (bool) ($orderData[$user['id']] ?? null);
}
  1. 处理 Db 类查询的结果集

场景:获取用户列表,并判断用户是否已下单

php 复制代码
$userList = Db::name('user')->select();
$userIds = array_column($userList, 'id');

$orderList = Db::name('order')->whereIn('user_id', $userIds)->select();
$orderData = array_column($orderList, null, 'user_id');

foreach ($userList as $key => $user) {
    $user['has_order'] = (bool) ($orderData[$user['id']] ?? null);
}
相关推荐
BingoGo11 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack11 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack1 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo1 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack2 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理3 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082853 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe3 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5
longxiangam3 天前
Composer 私有仓库搭建
php·composer
上海云盾-高防顾问3 天前
DNS异常怎么办?快速排查+解决指南
开发语言·php