【问题标题】:PDO fetchAll group key-value pairs into assoc arrayPDO fetchAll 将键值对分组到 assoc 数组中
【发布时间】: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 创建数组。但是,由于它涉及到两个数据库的两个调用,因此我将其作为一个选项省略了。

还有其他方法吗?

【问题讨论】:

    标签: php mysql pdo


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-20
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 2013-04-21
      • 2014-05-01
      相关资源
      最近更新 更多