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

Posted

技术标签:

【中文标题】PDO fetchAll 将键值对分组到 assoc 数组中【英文标题】:PDO fetchAll group key-value pairs into assoc array 【发布时间】:2011-11-19 01:12:30 【问题描述】:

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

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 和在 Windows 7 x64 上运行的 php 5.3.8 上。

【讨论】:

太棒了!不知道这个常数。显然 PDO 获取文档页面并未全部列出。不过,AS name, AS value 位是多余的。 另外,不知道,我的 IDE 为我突出显示了它...) 有没有办法使用PDO::FETCH_KEY_PAIR 并同时将输出作为object @adamj,要将值列作为对象返回,请使用:\PDO::FETCH_GROUP|\PDO::FETCH_UNIQUE|\PDO::FETCH_ASSOC 也适用于任何希望返回由第一列索引的整行的人,例如 ("id" => "name", "value", "age") 等。您可以使用 (PDO:: FETCH_UNIQUE)。【参考方案2】:
$query = $db->query("SELECT `name` AS name, `value` AS value FROM `settings`;");
$result = $query->fetchAll(PDO::FETCH_ASSOC);

【讨论】:

以上是关于PDO fetchAll 将键值对分组到 assoc 数组中的主要内容,如果未能解决你的问题,请参考以下文章

如何将键值对添加到字典中? [复制]

将键值对数据批量加载到 HBASE

javascript 将键值对添加到JavaScript对象

将键值对添加到 Javascript 对象中

将键值对(来自数组的值)添加到数组中的特定对象

dplyr | tidyverse:将键值对集合成单个键值(长格式)