You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PDO::FETCH_GROUP获取扁平化数组?

解决PDO FETCH_GROUP + FETCH_CLASS后的内层数组问题

当你使用PDO::FETCH_GROUP | PDO::FETCH_CLASS组合时,PDO会将每个主键分组下的结果封装进一个数组——哪怕每个主键仅对应一条记录,也会生成带索引0的内层数组。要得到主键直接映射到stdClass对象的扁平化数组,有两种简洁的解决方式:

方式一:事后处理结果数组

利用array_map配合current函数,直接提取每个内层数组的首个元素:

// 原查询代码
$objects = $stmt_obj->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_CLASS);
// 扁平化处理
$flattenedObjects = array_map('current', $objects);

current()函数会返回数组的当前指针元素(默认指向第一个元素,即索引0的对象),array_map会将这个操作应用到所有主键对应的数组上,最终得到你需要的结构。

方式二:调整PDO获取常量

直接使用PDO::FETCH_UNIQUE替代PDO::FETCH_GROUP,结合PDO::FETCH_CLASS:

$objects = $stmt_obj->fetchAll(PDO::FETCH_UNIQUE | PDO::FETCH_CLASS);

PDO::FETCH_UNIQUE的作用是将结果集的第一列(这里就是你的主键)作为数组键,并且每个键直接对应一条记录的对象实例,不会生成内层数组。这种方式无需额外处理,效率更高,前提是你的分组列(主键)是唯一的(这本身就是主键的特性)。

注意事项

  • 确保你的SQL查询中,主键列是结果集的第一列——FETCH_GROUP和FETCH_UNIQUE都是基于结果集的第一列进行分组/键映射的。如果主键不是第一列,需要调整查询字段顺序。

内容的提问来源于stack exchange,提问作者Phantom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:25:02