在使用PHP 操作MySQL 數據庫時,很多人用mysqli_query執行查詢後,會拿到一個mysqli_result對象。有時候我們只想提取其中某一列的數據,比如所有用戶名、所有ID,放進一個數組裡。這時候手動while循環來收集其實有點囉嗦。其實,PHP 內置的array_column()可以幫你輕鬆搞定。
本文就教你如何用array_column()快速從mysqli_result中提取某一列。
假設我們有一個用戶表users ,裡面有字段id和username 。我們想取出所有用戶名組成一個數組。
<?php
$mysqli = new mysqli('localhost', 'db_user', 'db_pass', 'db_name');
if ($mysqli->connect_error) {
die('連接失敗:' . $mysqli->connect_error);
}
$sql = "SELECT id, username FROM users";
$result = $mysqli->query($sql);
if (!$result) {
die('查詢失敗:' . $mysqli->error);
}
此時, $result是一個mysqli_result對象。我們需要把它轉換為數組,才能用array_column() 。
mysqli_fetch_all()可以把結果集一次性轉成二維數組。注意要用MYSQLI_ASSOC參數,確保拿到的是關聯數組。
$rows = $result->fetch_all(MYSQLI_ASSOC);
這時$rows的結構大概是這樣的:
[
['id' => 1, 'username' => 'alice'],
['id' => 2, 'username' => 'bob'],
['id' => 3, 'username' => 'charlie']
]
現在就可以用array_column()提取username這一列了:
$usernames = array_column($rows, 'username');
$usernames的結果就是:
['alice', 'bob', 'charlie']
如果你想提取id列並用id作為鍵,用:
$usernamesById = array_column($rows, 'username', 'id');
這樣$usernamesById就是:
[
1 => 'alice',
2 => 'bob',
3 => 'charlie'
]
<?php
$mysqli = new mysqli('localhost', 'db_user', 'db_pass', 'db_name');
if ($mysqli->connect_error) {
die('連接失敗:' . $mysqli->connect_error);
}
$sql = "SELECT id, username FROM users";
$result = $mysqli->query($sql);
if (!$result) {
die('查詢失敗:' . $mysqli->error);
}
$rows = $result->fetch_all(MYSQLI_ASSOC);
$usernames = array_column($rows, 'username');
print_r($usernames);
$mysqli->close();
?>