首页 > 解决方案 > 在 php 中用 2 个不同的表创建一个无名数组

问题描述

我的数据库中有 2 个表。1 充满了数字(外键),另一个充满了我需要的数据。这就是数组应该(确切地)看起来的样子

"array" : [
    {
        "data" : "blabla"
        "data2" : "blabla"
        "children" : [
            {
                "data" : "blabla"
                "data2" : "blabla" 
                "children" : [
                    {
                        "data" : "blabla"
                        "data2" : "blabla" 
                    }
                ]
            },
            {
                "data" : "blabla"
                "data2" : "blabla" 
                "children" : [
                    {
                        "data" : "blabla"
                        "data2" : "blabla" 
                    }
                ]
            }
        ]
    }
]

依此类推,可以这么说……现在您可以在表 1 中找到正确的顺序,其中列出了母亲 ID 是什么。我需要从表 2 中取出数据,所以要放在数组中。有人知道该怎么做吗?我在codeigniter工作

更新了图片:

在此处输入图像描述

在此处输入图像描述

标签: phparraysrecursionresultset

解决方案


为此,您需要分两个步骤进行处理:

  1. 您从两个表中获取每个文档及其数据(我们称它们为“文档”和“文档数据”以构建所有文档的平面数组。这样您就不必再怀疑数据去了哪里:

    $results = $this->db->query("SELECT d.*, dd.* FROM documents d LEFT JOIN documents_data dd ON dd.doc_id = d.doc_id");
    $documents = $results->result_array();
    
  2. 现在我们已经掌握了每个文档的所有内容,我们只需要使用递归函数将它们重新排序到递归数组中,该函数将使用每个孩子的父 ID 调用自身并构建树:

    function getDocumentTree($documents, $idParent = null)
    {
        $tree = [];
    
        foreach($documents as $document) {
            if($document['doc_doc_id'] == $idParent) {
                $document['children'] = getDocumentTree($documents, $document['doc_id']);
                $tree[] = $document;
            }
        }
    
        return $tree;
    }
    
    $tree = getDocumentTree($documents);
    

注意:我没有测试过这段代码,这只是一个关于它是如何工作的想法,尝试理解它(特别是递归的概念)并自己实现它。


推荐阅读