PDO fetchAll группирует пары ключ-значение в массив ассоциаций

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

SELECT `key`, `value` FROM `settings`;

В этом случае, Я хочу получить ассоциативный массив, используя значения ключа и значение в качестве соответствующих записей этого массива, например если база данных содержит: ('first_name', 'Tom'), ('last_name', 'Jeferson') , массив должен быть array ('first_name' => 'Tom', ' last_name '=>' Джеферсон '); .

Наиболее распространенный способ сделать это:

$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 для создания массива. Однако, поскольку он включает в себя два обращения к базе данных, я опускаю это как вариант.

Есть ли другой способ сделать это?

40
задан Gajus 28 August 2014 в 09:31
поделиться