在使用 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();
?>