首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PHP返回已修改数据的JSON

PHP返回已修改数据的JSON
EN

Stack Overflow用户
提问于 2017-06-23 03:06:36
回答 2查看 91关注 0票数 0

我希望我的类别列表是很好的格式,同时返回给用户。我从数据库中得到的信息是:

代码语言:javascript
代码运行次数:0
运行
复制
[
{
    "id": 1,
    "name": "pet",
    "parent_id": null
},
{
    "id": 2,
    "name": "page",
    "parent_id": null
},
{
    "id": 3,
    "name": "dog",
    "parent_id": 1
},
{
    "id": 4,
    "name": "cat",
    "parent_id": 1
},
{
    "id": 5,
    "name": "rodent",
    "parent_id": 1
},...

我想让它保持树形结构,比如:

代码语言:javascript
代码运行次数:0
运行
复制
{
    "id": 1,
    "name": "pet",
    "parent_id": null,
    "children": [
        {
            "id": 3,
            "name": "dog",
            "parent_id": 1
        },
        {
            "id": 4,
            "name": "cat",
            "parent_id": 1
        },...

等。

有没有简单的方法可以做到这一点,或者我必须遍历数据库结果并创建新的有组织的数组来返回?做到这一点的最佳方法是什么?问题是子类别也可以有子类别。或者,也许我应该保留从数据库中获得的结构,并将孩子的id添加为数组(因为我无论如何都可以引用它们)?

如果你能帮助我,我将不胜感激。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-06-23 03:47:01

解决方案:

代码语言:javascript
代码运行次数:0
运行
复制
function normalize_db_animals(){

    $values[] = ["id" => 1, "name" => "pet", "parent_id" => null];
    $values[] = ["id" => 2, "name" => "dog", "parent_id" => 1];
    $values[] = ["id" => 3, "name" => "cat", "parent_id" => 1];
    $values[] = ["id" => 4, "name" => "rodent", "parent_id" => 1];

    $values[] = ["id" => 5, "name" => "wild", "parent_id" => null];
    $values[] = ["id" => 6, "name" => "tiger", "parent_id" => 5];
    $values[] = ["id" => 7, "name" => "rhino", "parent_id" => 5];

    $normalize = function () use ($values) {
        $tree = [];
        $i = 0;
        do {
            $pet = $values[$i];
            if ($pet['parent_id']) {
                if (array_key_exists($pet['parent_id'], $tree)) {
                    $tree[$pet['parent_id']]['children'][] = $pet;
                }
            } else {
                $tree[$pet['id']] = $pet;
            }

            $i++;
        } while ($i < count($values));

        return $tree;
    };

    $tree = $normalize();
    echo json_encode($tree);
}

结果:

代码语言:javascript
代码运行次数:0
运行
复制
   {"1":{"id":1,"name":"pet","parent_id":null,"children":[{"id":2,"name":"dog","parent_id":1},{"id":3,"name":"cat","parent_id":1},{"id":4,"name":"rodent","parent_id":1}]},"5":{"id":5,"name":"wild","parent_id":null,"children":[{"id":6,"name":"tiger","parent_id":5},{"id":7,"name":"rhino","parent_id":5}]}}
票数 0
EN

Stack Overflow用户

发布于 2017-06-23 16:15:34

试试这个

代码语言:javascript
代码运行次数:0
运行
复制
$a = json_decode('[{
      "id": 1,
      "name": "pet",
      "parent_id": null
    },
    {
      "id": 2,
      "name": "page",
      "parent_id": null
    },
    {
      "id": 3,
      "name": "dog",
      "parent_id": 1
    },
    {
      "id": 4,
      "name": "cat",
      "parent_id": 1
    },
    {
      "id": 5,
      "name": "rodent",
      "parent_id": 4
    },
    {
      "id": 6,
      "name": "rodent",
      "parent_id": 2
    }]');

    $a = collect($a);

    $filtered = $a;

    foreach ($filtered as $key => $value) {
      $children = $a->where('parent_id', $value->id);
      if(!$children->isEmpty()){
        $value->children = $children;
       $filtered->forget(array_values(array_keys($children->toArray())));

      }

    }
    dd($filtered);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44707507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档