сделайте безымянный массив из 2 разных таблиц с потомками в php - PullRequest
0 голосов
/ 28 августа 2018

У меня есть 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, где указано, что такое идентификационный номер матери. и мне нужно получить данные из таблицы 2, так что быть в массиве. кто-нибудь знает как это сделать? я работаю в codeigniter

обновлено с фото:

enter image description here

enter image description here

1 Ответ

0 голосов
/ 28 августа 2018

Для этого вам нужно будет обработать в два этапа:

  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. Теперь, когда у нас есть все в каждом документе, нам просто нужно переупорядочить их в рекурсивном массиве, используя рекурсивную функцию, которая будет вызывать себя с родительским идентификатором для каждого потомка и строить дерево:

    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);
    

Примечание: я не тестировал этот код, это просто идея о том, как он работает, попытайтесь понять это (особенно концепцию рекурсивности) и реализовать его самостоятельно.

...