私は時々、次のようなクエリを持っている状況に陥ります。
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'];
}
*これを行うもう1つの方法は、fetchAll(PDO::FETCH_COLUMN)
を2回呼び出してから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、およびWindows 7 x64で実行されているPHP 5.3.8で動作します。