我已经看了很多这个问题。我想得到一个我的对象数组,id应该是键值。我是使用PDO :: FETCH_UNIQUE完成的。
它几乎按我想要的方式工作。这里的问题是ID将从对象中删除,并仅显示为键值。但是我希望键值作为id值并保持附加到对象的id。
我自己尝试过这个
$getUsers->fetchAll(\PDO::FETCH_UNIQUE|\PDO::FETCH_CLASS, User\Basic::class);
这确实返回了id,但id到处都是0。
概念:
{
id: 3,
name: 'pietje'
},
{
id: 4,
name: 'pietje'
}
然后我想要一个像这样的对象数组(我想我在这里犯了一个错误)
[3 => {
id: 3,
name: 'pietje'
},
4=> {
id: 4,
name: 'pietje'
}]
但就像我说的那样,对象中的id始终是我的方式,我在互联网上找不到任何关于我想要它的方式。 Yhea确定我可以循环每个用户并添加一个id,但是我可以遍历每个用户并创建一个以用户id为键值的新数组。
任何人?
答案 0 :(得分:1)
只需选择你的字段两次,
SELECT id, table.* FROM table ...
答案 1 :(得分:1)
PDO :: FETCH_GROUP将允许您对结果进行分组;由于您按ID进行分组并且应该是唯一的,因此您将根据需要获取所有行。 编辑:
$sth = $pdo_dbh->prepare('SELECT id, name FROM users');
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
$result = array_map('reset', $result);
将返回这样的数组。
Array
(
[2] => Array
(
[name] => Rob
)
[1] => Array
(
[name] => George
)
)
它有助于将ID列作为结果数组中的键移动,并且只在数组值中保留所需的列。我没注意到你希望将结果作为类对象获取。 使用array_map删除了不必要的嵌套。