使用PHP将数据从mysql解析为json


Parsing data from mysql to json with PHP

嗨,对不起我的英语。

我想使用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);
          ?>

它是否类似于这个

尽管如此,我认为还有更简单、更聪明的解决方案。

不管怎样,谢谢大家。