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);
}
相关推荐
郑州光合科技余经理18 小时前
架构解析:同城本地生活服务o2o平台海外版
大数据·开发语言·前端·人工智能·架构·php·生活
智能修复19 小时前
502 Bad Gateway:互联网世界的“断桥”时刻
开发语言·php
源码师傅19 小时前
AI短剧创作系统源码 开发语言:PHP+MySQL 基于uniapp 无限SAAS多开源码
人工智能·php·短剧小程序开发·ai短剧创作系统源码·ai短剧创作系统·短剧原创制作软件
BingoGo19 小时前
PHP 8.5 #[\NoDiscard] 揪出"忽略返回值"的 Bug
后端·php
星辰烈龙1 天前
黑马程序员JavaSE基础加强d5
服务器·网络·php
No0d1es1 天前
2025年12月 GESP CCF编程能力等级认证Python三级真题
开发语言·php
哥只是传说中的小白1 天前
Nano Banana Pro高并发接入Grsai Api实战!0.09/张无限批量生成(附接入实战+开源工具)
开发语言·数据库·ai作画·开源·aigc·php·api
亚历山大海2 天前
PHP HTML 实体(HTML Entities)没有被正确解码导致< 和 δ 等字符被转换
开发语言·html·php
二等饼干~za8986682 天前
碰一碰发视频系统源码搭建部署技术分享
服务器·开发语言·php·音视频·ai-native