You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP重排MySQLi查询结果为指定结构的数组?

如何将MySQLi查询结果重组为指定JSON结构?

当然可以实现!你遇到的重复数据问题是因为fetch_array()默认使用MYSQLI_BOTH模式,会同时返回索引数组和关联数组。我们只需要调整数组的构建逻辑,就能得到你想要的按字段分组的JSON结构。

调整后的完整代码

$conn = new mysqli("localhost", "root", "", "angular");

// 先检查数据库连接是否成功
if ($conn->connect_error) {
    die("数据库连接失败: " . $conn->connect_error);
}

// 初始化目标结构的数组,提前定义好需要的字段键
$out = [
    "firstname" => [],
    "lastname" => []
];

// 只查询需要的字段,避免不必要的数据传输
$sql = "SELECT firstname, lastname FROM members";
$query = $conn->query($sql);

// 使用fetch_assoc()只获取关联数组,避免索引重复
while($row = $query->fetch_assoc()){
    // 将每行的字段值分别推入对应数组
    $out["firstname"][] = $row["firstname"];
    $out["lastname"][] = $row["lastname"];
}

// 输出JSON格式结果
echo json_encode($out);

// 关闭数据库连接
$conn->close();

关键调整说明

  • 改用fetch_assoc():这个方法只返回以字段名为键的关联数组,不会产生索引形式的重复数据,既节省内存也让逻辑更清晰。
  • 按需查询字段:不要用SELECT *,只查询firstname和lastname,能提升数据库查询的效率。
  • 预定义结果结构:提前创建好包含目标键的数组,循环时直接将对应字段的值追加到数组中,这样就能生成你想要的分组结构。
  • 增加错误处理:添加连接失败的判断,避免出现无意义的空白输出,方便调试问题。

运行这段代码后,输出的JSON就会和你期望的完全一致:

{ "firstname": ["Neovic", "Julyn", "Gemalyn", "Tintin", "Tintin"], "lastname": ["Devierte", "Divinagracia", "Cepe", "Demapanag", "Devierte"] }

内容的提问来源于stack exchange,提问作者nurhodelta_17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:23:52