【发布时间】:2014-10-29 14:26:34
【问题描述】:
你好,对不起我的英语。
我想使用 PHP 将数据从 mysql 表解析为 JSON。 我的表有 2 列:“reg”、“base”代表区域和该区域的基数。 示例:
reg base
KIE KIE1
KIE KIE2
KIE KIE3
ZYT ZYT1
ZYT ZYT2
CHK CHK1
等
我正在尝试将这些值解析为如下所示的 JSON:
{"text":"Bases","leaf":false,"children":{"text":"KIE","leaf":false,"children":[{"text":"KIE1","leaf":true},{"text":"KIE2","leaf":true},{"text":"KIE3","leaf":true}]},{"text":"ZYT","leaf":false,"children":[{"text":"ZYT1","leaf":true},{"text":"ZYT2","leaf":true}]},{"text":"CHK","leaf":false,"children":[{"text":"CHK1","leaf":true}]}}
我的 PHP 代码:
<?php
header("Content-type: application/json; charset=utf-8");
$conn = mysqli_connect('localhost','test', '123','test');
$bases = array('text'=>'Bases','leaf'=>false);
$regions = "select distinct reg from bases";
$resreg = mysqli_query($conn,$regions);
while($reg=mysqli_fetch_assoc($resreg)){
$bases['children'] = array('text'=>$reg['reg'],'leaf'=>false, 'children'=>array());
$regi = $reg['reg'];
$query = "select base from bases where reg = '$regi' order by 1";
$result = mysqli_query($conn,$query);
while($row = mysqli_fetch_assoc($result)){
$c = array('text'=>$row['base'],'leaf'=>true);
$bases['children']['children'][]=$c;
}
}
$d = json_encode($bases);
echo $d;
mysqli_close($conn);
?>
问题是我只能从一个 reg 获取 JSON 中的值,而不能从其他人那里获取
例子:
{"text":"Bases","leaf":false,"children":{"text":"KIE","leaf":false,"children":[{"text":"KIE1","leaf":true},{"text":"KIE2","leaf":true},{"text":"KIE3","leaf":true}]}
我不确定这是获得我想要的东西的最佳方法,但我是编程新手。
任何人都可以帮助解决这个问题,或者告诉我更好的方法吗? 我的 ExtJs 应用程序树需要它。谢谢。
【问题讨论】:
-
每次迭代都会覆盖
$bases['children']。此外,您应该考虑使用 JOIN 查询来获取这些数据,而不是在嵌套循环中运行一堆查询。 -
@MikeBrant 是的,我就是这么想的。但是你能解释一下吗?也许查询的例子?我真的不明白为什么我应该在我的情况下使用带有连接的查询:(