如何用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
相关产品推荐
相关产品推荐

