PDO fetchAll组键值对进入assoc数组

Gaj*_*jus 40 php mysql pdo

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

SELECT `key`, `value` FROM `settings`;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想获得一个关联数组,使用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'];
}
Run Code Online (Sandbox Code Playgroud)

*另一种方法是通过调用fetchAll(PDO::FETCH_COLUMN)两次然后使用array_combine来创建数组.但是,因为它涉及两个数据库的两个调用,所以我将其作为一个选项.

还有另一种方法吗?

dev*_*Rew 88

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

$q = $db->query("SELECT `name` AS name, `value` AS value FROM `settings`;");
$r  = $q->fetchAll(PDO::FETCH_KEY_PAIR);
Run Code Online (Sandbox Code Playgroud)

适用于我,PostgreSQL 9.1和运行在Windows 7 x64上的PHP 5.3.8.

  • 大!不知道这个常数.显然,PDO获取文档页面并未全部列出.虽然,"AS名称,AS值"位是多余的. (4认同)
  • 有没有办法使用`PDO::FETCH_KEY_PAIR`并同时将输出作为`object`? (2认同)
  • 对于任何想要返回由第一列索引的整行的人,例如(“id”=>“name”,“value”,“age”)等,您可以使用(PDO :: FETCH_UNIQUE)。 (2认同)