嗨,对不起我的英语。
我想使用PHP将数据从mysql表解析为JSON。我的表有两列:"reg"、表示区域的"base"和该区域中的base。示例:
reg base
KIE KIE1
KIE KIE2
KIE KIE3
ZYT ZYT1
ZYT ZYT2
CHK CHK1
etc
我正在尝试将这些值解析为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应用程序树需要它。非常感谢。
while($reg=mysqli_fetch_assoc($resreg)){
$bases['children'] = array('text'=>$reg['reg'],'leaf'=>false, 'children'=>array());
应为:
while($reg=mysqli_fetch_assoc($resreg)){
$bases['children'][] = array('text'=>$reg['reg'],'leaf'=>false, 'children'=>array());
因为现在要将array('text'=>$reg['reg'],'leaf'=>false, 'children'=>array());
添加到$bases['children']数组的索引中。
和以前一样,每次while循环运行时,您只是重写$bases['children']
,因此它只等于分配给它的最后一个数据(最后一次迭代)的值。
这就回答了如何使$bases['children']
为多个值的问题,因为"我不知道这是否是最好的方法"需要进行代码审查。
找到了一些解决方案:
list.php
<?php
header("Content-type: application/json; charset=utf-8");
$conn = mysqli_connect('localhost','test', '123','test');
$bases = array('text'=>'Bases','leaf'=>false,'children'=>'');
$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'=>'');
}
foreach($bases['children'] as $k=>$v){
$query = "select base from bases where reg = '".$bases['children'][$k]['text']."'";
$result = mysqli_query($conn,$query);
while($row=mysqli_fetch_assoc($result)){
$bases['children'][$k]['children'][] = array('text'=>$row['base'],'leaf'=>true);
}
}
$d = json_encode($bases);
echo $d;
mysqli_close($conn);
?>
它是否类似于这个
尽管如此,我认为还有更简单、更聪明的解决方案。
不管怎样,谢谢大家。