2016-03-15 40 views
0

我有一個查詢,從數據庫中獲取有關畫廊類別的信息,並將其加載到數組中,以便在整個腳本中的多個位置使用。使用colum來定義鍵使用mysqli_fetch_all

$q_gals = "SELECT `gal_id`, `gal_name` FROM `cms_galleries` ORDER BY `gal_sort` ASC, `gal_id` DESC"; 
$r_gals = $dbc->query($q_gals); 
if (($r_gals) && ($r_gals->num_rows > 0)) { 
    $galleries = $r_gals->fetch_all(MYSQLI_ASSOC); 
} 

我寧願有$galleries陣的鑰匙是從查詢gal_id值。我知道我可以簡單地通過將結果與一個while循環迭代做到這一點,手工打造的陣列,因爲我想它:

$galleries = array(); 
while($row_gal = $r_gal->fetch_assoc()) { 
    $galleries[$row_gal['gal_id']] = $row_gal['gal_name']; 
} 

並坦率地說,它主要是在整潔的代碼,fetch_all給了我,這讓我想要做到這一點。這不是一個巨大的腳本,兩者之間的任何性能差異都是無關緊要的。我可以,我想通過現有的數組循環並用gal_id值更新密鑰,但這看起來有些自欺欺人。

對我而言,這是一廂情願嗎?或者是否有一些晦澀的技巧可以實現這一點?

+0

如果您只想要gal_id,那麼您可以通過在SELECT語句中添加GROUP_CONCAT(gal_id)來替換查詢,該語句只會使用逗號分隔的字段值給出一行。 –

+0

不,我想'gal_id'和'gal_name'列,只是'gal_id'作爲數組的鍵,'gal_name'作爲值。 –

+0

請檢查以下鏈接中的示例#3部分: http://php.net/manual/en/pdostatement.fetchall.php –

回答

1

我想在這裏做一些假設,第一個也是最重要的是你使用PHP 5.5或更高版本,第二個是你只是想避免for循環而不是實際做一些SQL魔術...

要在一行代碼中實現這一點,您需要使用幾個容易遺漏的PHP數組函數; array_column()array_combine()

到位的代碼的for循環應該是這樣的:

$galleries = array_combine(array_column($galleries, 'gal_id'), $galleries); 

的array_columns()調用創建自定義的列的數組,所以你最終包含數組只是「gal_id '價值觀。然後array_combine()使用第一個數組作爲數組鍵值將第一個數組和第二個數組合並。

+0

它位於共享服務器上,但我可以將其設置爲運行PHP 5.5。我會試試這個。謝謝。 –