PDO fetchAll 将键值对分组到 assoc 数组中
Posted
技术标签:
【中文标题】PDO fetchAll 将键值对分组到 assoc 数组中【英文标题】:PDO fetchAll group key-value pairs into assoc array 【发布时间】:2011-11-19 01:12:30 【问题描述】:我时不时会遇到类似以下问题的查询:
SELECT `key`, `value` FROM `settings`;
在这种情况下,我想获得一个关联数组,使用 key
和 value
的值作为该数组的相应条目,例如如果数据库包含:('first_name', 'Tom'), ('last_name', 'Jeferson')
,则数组应为array('first_name' => 'Tom', 'last_name' => 'Jeferson');
。
最常见的方法是:
$settings_flat = $db
->query("SELECT `name`, `value` FROM `settings`;")
->fetchAll(PDO::FETCH_ASSOC);
$settings = array();
foreach ($settings_flat as $setting)
$settings[$setting['name']] = $setting['value'];
*另一种方法是调用fetchAll(PDO::FETCH_COLUMN)
两次,然后使用array_combine
创建数组。但是,由于它涉及到两个数据库的两个调用,因此我将其作为一个选项省略了。
还有其他方法吗?
【问题讨论】:
【参考方案1】:对于您的问题,有现成的解决方案,即:
$q = $db->query("SELECT `name`, `value` FROM `settings`;");
$r = $q->fetchAll(PDO::FETCH_KEY_PAIR);
适用于我,在 PostgreSQL 9.1 和在 Windows 7 x64 上运行的 php 5.3.8 上。
【讨论】:
太棒了!不知道这个常数。显然 PDO 获取文档页面并未全部列出。不过,AS name, AS value
位是多余的。
另外,不知道,我的 IDE 为我突出显示了它...)
有没有办法使用PDO::FETCH_KEY_PAIR
并同时将输出作为object
?
@adamj,要将值列作为对象返回,请使用:\PDO::FETCH_GROUP|\PDO::FETCH_UNIQUE|\PDO::FETCH_ASSOC
也适用于任何希望返回由第一列索引的整行的人,例如 ("id" => "name", "value", "age") 等。您可以使用 (PDO:: FETCH_UNIQUE)。【参考方案2】:
$query = $db->query("SELECT `name` AS name, `value` AS value FROM `settings`;");
$result = $query->fetchAll(PDO::FETCH_ASSOC);
【讨论】:
以上是关于PDO fetchAll 将键值对分组到 assoc 数组中的主要内容,如果未能解决你的问题,请参考以下文章