PDO 获取所有分组键值对到 assoc 数组中

2022-08-30 11:29:16

时不时地,当我有一个类似于以下类型的查询时,我会遇到这样一种情况:

SELECT `key`, `value` FROM `settings`;

在这种情况下,我想得到一个关联数组,使用&的值作为该数组的相应条目,例如,如果数据库包含:,数组应该是。keyvalue('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和PHP 5.3.8上运行在Windows 7 x64上。


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

推荐