PDO fetchAll групповые пары ключ-значение в ассоциативный массив - PullRequest
40 голосов
/ 17 сентября 2011

Время от времени я попадаю в ситуацию, когда у меня возникает запрос, похожий на:

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 ]

86 голосов
/ 12 января 2012

Для вашей проблемы есть довольно готовое решение, а именно:

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

У меня работает на PostgreSQL 9.1 и PHP 5.3.8, работающих на Windows 7 x64.

0 голосов
/ 22 января 2014
$query = $db->query("SELECT `name` AS name, `value` AS value FROM `settings`;");
$result = $query->fetchAll(PDO::FETCH_ASSOC);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...