PDO fetchAll组键值对进入assoc数组

时间:2011-09-16 22:48:33

标签: php mysql pdo

我偶尔会遇到类似的查询:

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创建数组。但是,由于它涉及两个数据库中的两个调用,因此我将其作为一个选项。

还有其他办法吗?

2 个答案:

答案 0 :(得分:85)

对于你的问题,有很好的解决方案,即:

$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。

答案 1 :(得分:-5)

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