PDO fetchAll组键值对到关联数组


PDO fetchAll group key-value pairs into assoc array

时不时地,我就会遇到类似这样的查询:

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创建数组。但是,因为它涉及到对数据库的两次调用,所以我把它作为一个选项省略了。

还有别的方法吗?

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

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

适用于PostgreSQL 9.1和PHP 5.3.8在Windows 7 x64上运行

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