php - 将平面 json 转换为像 json 一样的 TreeView

标签 php mysql json

            while($row = mysqli_fetch_assoc($result)) { 
              echo (json_encode($row));  
            }   

echo 产生:

            {"name":"REPORTING","parent":"null","children":"BO"}{"name":"IHS","parent":"BO","children":"1"}{"name":"TOMCAT","parent":"BO","children":"1"}{"name":"WAS","parent":"BO","children":"1"}{"name":"BO","parent":"BO","children":"1"}{"name":"1","parent":"IHS","children":"APP NAME"}{"name":"1","parent":"TOMCAT","children":"APP NAME"}{"name":"1","parent":"WAS","children":"APP NAME"}{"name":"1","parent":"BO","children":"APP NAME"}       

我正在寻找的是:

[
  {
    "name": "REPORTING",
    "parent": "null",
    "children": [
      {
        "name": "BO",
        "parent": "REPORTING",
        "children": [
          {
            "name": "I H S",
            "parent": "BO",
            "children": [
          {
            "name": "34534",
            "parent": "BO",
            "children": [

          {
            "name": "Application Name",
            "parent": "34534",

          }
        ]
          },
          {
            "name": "34535",
            "parent": "BO",
            "children": [

          {
            "name": "Application Name",
            "parent": "34535",

          }
        ]

          },
          {
            "name": "34536",
            "parent": "BO",
            "children": [

          {
            "name": "Application Name",
            "parent": "34536",

          }
        ]

最佳答案

您不能将行转储到 json_encode echo 中,因为您的数据与所需结果中的 JSON 的结构不同。您必须编写基于父/子值构造树的代码。我建议您创建一个包含所需字段的类,并在循环中填充数据。

一个简单的示例(未完成的代码,只是为了提供对该方法的一些了解):

require_once ('MyClass.php')
$data = new MyClass();
while($row = mysqli_fetch_assoc($result)) {
    if($row['parent'] == 'null') {
        $data->parse($row);
    } else {
        $child = $data->findChild($row['parent']);
        if($child !== false) {
            $child->parseChild($row);
        }
    }
}
echo json_encode($data);

MyClass.php:

class MyClass {
    public $name;
    public $parent;
    public $children;

    public function __construct($name = "") {
        $this->name = $name;
        $this->parent = "null";
        $this->children = array();
    }

    public function parse($rowdata) {
        $this->name = $rowdata['name'];
        $this->parent = $rowdata['parent'];
        echo "Created object " . $this->name . "\n";
    }

    public function parseChild($rowdata) {
        $child = new MyClass();
        $child->parse($rowdata);
        $this->children[] = $child;
    }

    public function findChild($name) {
        if($this->name == $name) {
            return $this;
        } else {
            foreach($this->children as $child) {
                if($child->name == $name) {
                    return $child;
                } else {
                    $ch = $child->findChild($name);
                    if($ch !== false) {
                        return $ch;
                    }
                }
            }
        }
        return false;
    }
}

这段代码有缺陷和错误,比如 parent 需要在 child 之前。在您的示例中,echo IHS 在 BO 之前出现,因此没有这样的父级,因此无法创建子级。您需要正确排序数据才能使此代码正常工作。

关于php - 将平面 json 转换为像 json 一样的 TreeView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23514763/

相关文章:

php - php崩溃后mysql表被锁定

php - 有什么方法可以在核心 php 代码中访问 WordPress 数据库

mysql - 重新配置phpmyadmin数据库

ios - 如何获取 JSON 中的数据?

json - 如何将json对象数组保存到mongoose?

php - 如何检查是否启用了 allow_url_fopen

javascript - FIrebug 中不包含文件且为空的脚本元素

php - 需要帮助优化 PHP 函数

php - 如何从mysql数据库获取一个用户的等级?

php - 错误的 json 数组 Python post 请求到 PHP