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

如何利用PDO获取以ID为键的对象数组?

嘿,这个需求我刚好实操过,给你几个简单好用的方案:

方案1:一步到位的简洁写法

如果你想直接得到以ID为键的stdClass对象数组,可以组合使用PDO::FETCH_UNIQUE和PDO::FETCH_OBJ两个常量:

$temp = $sth->fetchAll(PDO::FETCH_UNIQUE | PDO::FETCH_OBJ);

原理很简单:

  • PDO::FETCH_UNIQUE会把结果集的第一列(也就是你的id列)作为数组的键
  • PDO::FETCH_OBJ会将每一行数据转换成标准的stdClass对象
    这样组合起来,直接就能得到你想要的结构:[11 => stdClass{id:11, title:'t1'}, 12 => stdClass{id:12, title:'t2'}]

方案2:兼容非首列ID的写法

如果你的id列不是查询结果的第一列(比如查询语句是SELECT title, id FROM ...),那可以用PDO::FETCH_GROUP配合array_map,把原来的FETCH_ASSOC换成FETCH_OBJ即可:

$temp = array_map(function($v){return $v[0];}, $sth->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_OBJ));

这里PDO::FETCH_GROUP会按第一列分组,我们通过array_map提取每个分组里的第一个对象,同样能得到以ID为键的对象数组。

方案3:获取自定义类的对象数组

要是你不想用默认的stdClass,而是想得到自定义类的对象(比如Post类),可以搭配PDO::FETCH_CLASS:
首先定义你的类:

class Post {
    public $id;
    public $title;
}

然后用下面的代码获取:

$temp = $sth->fetchAll(PDO::FETCH_UNIQUE | PDO::FETCH_CLASS, 'Post');

这样得到的数组里,每个值都是Post类的实例,属性会自动对应结果集的字段。

内容的提问来源于stack exchange,提问作者Sławomir Kudła

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:26:16