PDO fetchAll групповые пары ключ-значение в ассоциативный массив
Время от времени я попадаю в ситуацию, когда у меня есть запрос, похожий на:
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 ответа
Для вашей проблемы есть довольно готовое решение, а именно:
$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.
$query = $db->query("SELECT `name` AS name, `value` AS value FROM `settings`;");
$result = $query->fetchAll(PDO::FETCH_ASSOC);