时不时地,我遇到类似以下查询的情况:
SELECT `key`, `value` FROM `settings`;
在这种情况下,我想获得一个关联数组,使用key&的值value作为该数组的相应条目,例如,如果数据库包含:('first_name', 'Tom'), ('last_name', 'Jeferson'),则该数组应为array('first_name' => 'Tom', 'last_name' => 'Jeferson');。
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创建数组。但是,由于涉及两个数据库两个调用,因此我将其省略。
fetchAll(PDO::FETCH_COLUMN)
array_combine
还有另一种方法吗?
对于您的问题,有一个非常好的解决方案,即:
$q = $db->query("SELECT `name` AS name, `value` AS value FROM `settings`;"); $r = $q->fetchAll(PDO::FETCH_KEY_PAIR);
适用于我,在PostgreSQL 9.1和在Windows 7 x64上运行的PHP 5.3.8上。