php - 在 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工作
更新了图片:
解决方案
为此,您需要分两个步骤进行处理:
您从两个表中获取每个文档及其数据(我们称它们为“文档”和“文档数据”以构建所有文档的平面数组。这样您就不必再怀疑数据去了哪里:
$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);
注意:我没有测试过这段代码,这只是一个关于它是如何工作的想法,尝试理解它(特别是递归的概念)并自己实现它。
推荐阅读
- xml - 更新 XML 父元素编号以匹配子编号
- sql - 在 JSON 中将 unicode 转换为中文字符?
- java - 难以将图像添加到 JTable 单元格中
- azure-devops - 如何在 azure devops 项目中找到禁用的 azure 服务
- mongodb - 线程死锁 Mongo Java 驱动程序
- vim - 本机 vim 插件加载顺序
- google-compute-engine - 谷歌云平台 - 计算引擎
- react-native - React Native 中的布尔运算含义
- html - 什么是块维度?
- prolog - Swi Prolog:如何使用规则计算元素的数量(不是查询)