ThinkPHP不提供专属数组函数,主要依赖PHP原生函数并封装了Arr类等辅助方法;高频使用array_column、array_unique+array_values、in_array(strict)、array_filter;TP封装的Arr::has、Arr::get、Arr::only、Arr::except提升安全性与可读性;数据库查询结果转数组后结合原生函数实现IN查询、键值映射、二维排序及树形结构生成。

ThinkPHP 本身不提供独立的“TP专属数组函数”,它底层依赖 PHP 原生数组函数,同时在框架层封装了更贴合业务场景的辅助方法(尤其在模型、查询构建器和工具类中)。实际开发中,90%以上的数组处理仍用 PHP 原生函数,TP 的价值在于让这些操作更简洁、更安全、更易与数据库结果联动。
直接复用 PHP 原生函数(最常用)
ThinkPHP 全面兼容标准 PHP 数组函数,无需额外引入,可直接使用。以下是最高频且推荐的组合:
-
array_column():从模型查询结果中快速提取单列,比如获取所有用户 ID:
$userIds = array_column(UserModel::select()->toArray(), 'id'); -
array_unique() + array_values():去重并重置索引,避免键名混乱:
$cleanIds = array_values(array_unique($rawIds)); -
in_array() + strict 模式:判断某值是否在 ID 列表中,开启严格比较防类型误判:
if (in_array($targetId, $userIds, true)) { ... } -
array_filter():配合匿名函数筛选数据,例如只保留已激活用户:
$activeUsers = array_filter($users, function($u) { return $u['status'] === 1; });
TP 封装的实用数组工具方法
ThinkPHP5/6 在 think\helper\Arr 类或 think\facade\Support\Arr 中提供了轻量级增强方法,非必须但能提升可读性:
-
Arr::has($array, 'user.name'):支持点号语法检查多维键是否存在,比
isset($arr['user']['name'])更简洁 - Arr::get($array, 'profile.avatar', '/default.png'):安全取值,键不存在时返回默认值,避免 Notice 报错
- Arr::only($data, ['username', 'email', 'mobile']):白名单过滤,只保留指定键,常用于表单提交数据清洗
- Arr::except($data, ['password', 'token']):黑名单排除,如隐藏敏感字段再返回给前端
处理数据库查询结果的典型模式
TP 的 select()、find() 默认返回对象集合,转数组后即可用标准函数处理:
立即学习“PHP免费学习笔记(深入)”;
- 提取关联字段做 IN 查询:
$orderIds = array_column(OrderModel::where('status', 1)->select()->toArray(), 'id');<br>ProductModel::whereIn('order_id', $orderIds)->select(); - 构造键值映射便于快速查找:
$userMap = array_column(UserModel::select()->toArray(), null, 'id');<br>// 后续可直接 $userMap[123] 获取用户信息,无需再次查库
- 二维数组按字段排序(如按创建时间倒序):
$list = $query->select()->toArray();<br>usort($list, function($a, $b) { return $b['create_time'] <=> $a['create_time']; });
自定义树形结构生成(常见于菜单/分类)
TP 官方未内置树形转换,但社区广泛使用的 listToTree() 函数可直接集成到助手类中:
- 要求原始数组含
id和pid字段,且父级需在子级之前(或先用usort排序) - 调用示例:
$menuList = Db::name('menu')->order('sort ASC')->select()->toArray();<br>$tree = listToTree($menuList); // 返回嵌套数组 - 关键逻辑:用引用建立父子关系,避免递归查询,性能优于多次 DB 查询



















