De temps en temps, je me retrouve dans une situation où j'ai une requête similaire en nature à:
SELECT `key`, `value` FROM `settings`;
Dans ce cas, je veux obtenir un tableau associatif, en utilisant les valeurs de key
& value
comme entrées respectives de ce tableau, par exemple si la base de données contient: ('first_name', 'Tom'), ('last_name', 'Jeferson')
, le tableau doit être array('first_name' => 'Tom', 'last_name' => 'Jeferson');
.
La façon la plus courante de procéder est:
$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'];
}
* L'autre façon de procéder consiste à appeler fetchAll(PDO::FETCH_COLUMN)
deux fois puis à utiliser array_combine
Pour créer le tableau. Cependant, comme cela implique deux appels, deux la base de données, je laisse cela en option.
Y a-t-il une autre façon de procéder?
Pour votre problème, il existe une solution assez prête, à savoir:
$q = $db->query("SELECT `name` AS name, `value` AS value FROM `settings`;");
$r = $q->fetchAll(PDO::FETCH_KEY_PAIR);
Fonctionne pour moi, sur PostgreSQL 9.1 et PHP 5.3.8 fonctionnant sous Windows 7 x64.