用 php 中的子项创建一个无名数组 2 个不同的表
make a nameless array out 2 diferent tables with children in php
我的数据库中有 2 个 table。 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"
}
]
}
]
}
]
等等,也就是说.. 现在你可以在 table 1 中找到正确的顺序,其中标明了母亲的 ID 是什么。我需要从 table 2 中获取数据,所以在数组中。任何人都知道如何做到这一点?我在 codeigniter
工作
更新图片:
为此,您需要分两步进行处理:
您从两个表中获取每个文档及其数据(我们称它们为 "documents" 和 "documents_data" 以构建所有文档的平面数组。这样您就不会不必再想知道数据去了哪里:
$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();
现在我们已经掌握了每个文档的所有内容,我们只需要使用递归函数在递归数组中对它们重新排序,它将使用每个子项的父 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);
注意:我没有测试过这段代码,这只是一个关于它如何工作的想法,尝试理解它(尤其是递归的概念)并自己实现它。
我的数据库中有 2 个 table。 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"
}
]
}
]
}
]
等等,也就是说.. 现在你可以在 table 1 中找到正确的顺序,其中标明了母亲的 ID 是什么。我需要从 table 2 中获取数据,所以在数组中。任何人都知道如何做到这一点?我在 codeigniter
工作更新图片:
为此,您需要分两步进行处理:
您从两个表中获取每个文档及其数据(我们称它们为 "documents" 和 "documents_data" 以构建所有文档的平面数组。这样您就不会不必再想知道数据去了哪里:
$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();
现在我们已经掌握了每个文档的所有内容,我们只需要使用递归函数在递归数组中对它们重新排序,它将使用每个子项的父 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);
注意:我没有测试过这段代码,这只是一个关于它如何工作的想法,尝试理解它(尤其是递归的概念)并自己实现它。