2011-09-16 83 views
36

時不時地,我進入的情況時,我有一種類似的查詢:PDO使用fetchall組鍵值對到assoc命令陣列

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創建陣列。但是,由於它涉及兩個數據庫的調用,所以我忽略了這個選項。

是否有另一種方法可以做到這一點?

回答

76

對於你的問題有很現成的解決方案,那就是:

$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上運行64位。

+3

太好了!不知道這個常數。顯然,PDO獲取文檔頁面並未全部列出。雖然'AS名稱,AS值'位是多餘的。 – Gajus

+0

另外,不知道,我的IDE強調它對我來說......) – devdRew

+1

有沒有辦法使用'PDO :: FETCH_KEY_PAIR'並有輸出作爲'對象'在同一時間? – adamj

-3
$query = $db->query("SELECT `name` AS name, `value` AS value FROM `settings`;"); 
$result = $query->fetchAll(PDO::FETCH_ASSOC);