php - PDO fetchAll 将键值对分组到 assoc 数组中

我时不时会遇到类似以下问题的查询:

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

在这种情况下,我想获得一个关联数组,使用 keyvalue 的值作为该数组的相应条目,例如如果数据库包含:('first_name', 'Tom'), ('last_name', 'Jeferson'),则数组应为 array('first_name' => 'Tom', 'last_name' => 'Jefferson');.

最常见的方法是:

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

https://stackoverflow.com/questions/7451126/

相关文章:

php - 如何使用 Laravel 4 Eloquent 连接列?

php - 从字段不匹配条件的表中选择

mysql - 仅获取mysql中时间戳中的日期

mysql - INSERT ... 使用 WHERE 进行重复的 key 更新?

php - DateTime 类的对象无法转换为字符串

mysql - 列计数与第 1 行的值计数不匹配

python - 如何安装 MySQLdb 包? (导入错误 : No module named s

php - MySQL 删除多列

mysql - 带有引用 MySQL 中同一个表的子查询的 SQL UPDATE

php - 选择在 wp_usermeta 表中的多行上具有合格数据的用户