2011-09-16 55 views
36

时不时地,我进入的情况时,我有一种类似的查询:PDO使用fetchall组键值对到assoc命令阵列

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创建阵列。但是,由于它涉及两个数据库的调用,所以我忽略了这个选项。

是否有另一种方法可以做到这一点?

回答

76

对于你的问题有很现成的解决方案,那就是:

$q = $db->query("SELECT `name` AS name, `value` AS value FROM `settings`;"); 
$r = $q->fetchAll(PDO::FETCH_KEY_PAIR); 

工作对我来说,PostgreSQL的9.1和PHP 5.3.8在Windows 7上运行64位。

+3

太好了!不知道这个常数。显然,PDO获取文档页面并未全部列出。虽然'AS名称,AS值'位是多余的。 – Gajus

+0

另外,不知道,我的IDE强调它对我来说......) – devdRew

+1

有没有办法使用'PDO :: FETCH_KEY_PAIR'并有输出作为'对象'在同一时间? – adamj

-3
$query = $db->query("SELECT `name` AS name, `value` AS value FROM `settings`;"); 
$result = $query->fetchAll(PDO::FETCH_ASSOC);