0

我有两张桌子:

表格1:

Make       Model 1 ID      Model 2 ID      Model 3 ID
----       ----------      ----------      ----------
Ford       1               4               7
Chevrolet  2               3               5
Dodge      6               8               9

表 2:

ID         Model            Engine
----       -----            ------
1          F-150            Triton V8
2          Silverado        Vortec V8
3          Corvette         LS9 V8
4          Fusion           Duratec I4
5          Camaro           LSA V8
6          Ram              Hemi V8
7          Mustang          Modular V8
8          Grand Caravan    Pentastar V6
9          Challenger       Hemi V8

我希望将链接数据输出(你是这么说的吗?我对编程术语有点陌生。对不起。)作为 JSON 使用 PHP,所以输出看起来像这样(或者如果我的输出看起来非常相似) JSON 语法错误):

 {
  [
   {
    "make": "Ford",  
    "models": 
     [ 
      { 
      "ID": "1",
      "info": 
         {
         "model": "F-150",
         "engine": "Triton V8", 
         }
      },
      { 
      "ID": "4",
      "info": 
         {
         "model": "Fusion",
         "engine": "Duratec I4", 
         }
      },
      { 
      "ID": "7",
      "info": 
         {
         "model": "Mustang",
         "engine": "Triton V8", 
         }
      },
     ] 
   },
   {
    "make": "Chevrolet",  
    "models": 
     [ 
      { 
      "ID": "2",
      "info": 
         {
         "model": "Silverado",
         "engine": "Vortec V8", 
         }
      },
      { 
      "ID": "3",
      "info": 
         {
         "model": "Corvette",
         "engine": "LS9 V8", 
         }
      },
      { 
      "ID": "5",
      "info": 
         {
         "model": "Camaro",
         "engine": "", 
         }
      },
     ] 
   },   {
    "make": "Dodge",  
    "models": 
     [ 
      { 
      "ID": "6",
      "info": 
         {
         "model": "Ram",
         "engine": "Hemi V8", 
         }
      },
      { 
      "ID": "8",
      "info": 
         {
         "model": "Grand Caravan",
         "engine": "Pentastar V6", 
         }
      },
      { 
      "ID": "9",
      "info": 
         {
         "model": "Challenger",
         "engine": "Hemi V8", 
         }
      },
     ] 
   }
  ]
}

问题是,你如何使用 PHP 做到这一点?感谢您花时间阅读这篇相当长的文章,并提前感谢您尝试提出解决方案。

如果您想建议使用 jQuery 的解决方案,那也可以。

4

1 回答 1

2

你的数据库是错误的。试试这个结构:

MakeID Make
------ ----
1      Ford
2      Chevrolet
3      Dodge

ModelID MakeID Model          Engine
------- ------ -------------- ------
1       1      F-150          Triton V8
2       2      Silverado      Vortec V8
3       2      Corvette       LS9 V8
4       1      Fusion         Duratec I4
5       2      Camaro         LSA V8
6       3      Ram            Hemi V8
7       1      Mustang        Modular V8
8       3      Grand Caravan  Pentastar V6
9       3      Challenger     Hemi V8

现在您可以执行以下操作:

$sql = mysql_query("select * from `table1` join `table2` using (`MakeID`)");
$out = Array();
while($car = mysql_fetch_assoc($sql)) {
    if( !isset($out[$car['MakeID']])) {
        $out[$car['MakeID']] = Array("make"=>$car['Make'],"models"=>Array());
    }
    $out[$car['MakeID']]['models'][] = Array(
        "ID"=>$car['ModelID'],
        "info":Array(
            "model"=>$car['Model'],
            "engine"=>$car['Engine']
        )
    );
}
$out = array_values($out);
echo json_encode($out);
于 2013-02-21T21:51:25.983 回答