如何构建以汽车品牌为键、车型数组为值的JSON结构?
PHP代码修正:实现品牌-车型分组JSON结构
问题根源
你当前的代码大概率是把每个品牌的车型结果以数组元素的形式追加到了结果里,导致输出的JSON是包含多个对象的数组,而非预期的单对象、品牌为键、车型数组为值的结构。
修正方案
基于PDO的修正代码
// 定义目标品牌数组 $brands = ['Toyota', 'Mazda', 'Mitsubishi']; // 初始化最终结果数组 $finalData = []; foreach ($brands as $brand) { // 准备查询语句,避免SQL注入 $sql = "SELECT valuex FROM key_value_pairs WHERE parent = ?"; $stmt = $pdo->prepare($sql); $stmt->execute([$brand]); // 直接获取单列数据为一维数组(车型列表) $models = $stmt->fetchAll(PDO::FETCH_COLUMN); // 将品牌作为键,车型数组作为值存入结果 $finalData[$brand] = $models; } // 输出符合要求的JSON echo json_encode($finalData);
基于mysqli的修正代码
如果用的是mysqli扩展,写法如下:
$brands = ['Toyota', 'Mazda', 'Mitsubishi']; $finalData = []; // 假设$conn是已建立的mysqli连接对象 foreach ($brands as $brand) { $sql = "SELECT valuex FROM key_value_pairs WHERE parent = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("s", $brand); $stmt->execute(); $result = $stmt->get_result(); $models = []; // 遍历结果集收集车型 while ($row = $result->fetch_assoc()) { $models[] = $row['valuex']; } $finalData[$brand] = $models; } echo json_encode($finalData);
核心要点
- 不要把每个品牌的结果作为新元素追加到数组(
$result[] = ...),而是直接以品牌为键赋值($finalData[$brand] = $models) - 使用
PDO::FETCH_COLUMN(PDO)或手动遍历收集(mysqli)可以得到纯净的车型一维数组,避免多余的嵌套结构
内容的提问来源于stack exchange,提问作者Gandalf
相关产品推荐
相关产品推荐

