【问题标题】:PHP recursion array using MYSQL data使用MYSQL数据的PHP递归数组
【发布时间】:2014-03-05 08:27:08
【问题描述】:

我有一个包含数据的表,这些数据表示为行,每行是一个任务,一个任务可能有一个子任务,而该子任务也可能有一个子任务。这表示,从您第一次购买黑胶唱片时开始,您就可以更轻松地进行退货。

这是我的桌子:

-----------------------------------------------------------------------------
id | task_name  | parent_task_id
-----------------------------------------------------------------------------
1  | start      | 0
2  | buy        | 1
3  | receive    | 2
4  | open       | 2
5  | clean      | 4
6  | listen     | 4
7  | file       | 4
8  | return     | 1
9  | pack       | 8
10 | send       | 8
11 | side A     | 6
12 | side B     | 6

首先我知道桌子的设计一点都不好,但我无法改变它。

例如,第一行没有父行,它位于“开始”处,即树开始的地方。

这是希望在 PHP 中用递归函数表示的可视化树。如果您也可以使用 MYSQL 查询找到一个,则可以加分。

start -> buy    -> receive
                -> open ------> clean
                        ------> listen -> side A
                                       -> side B
                        ------> file   

      -> return -> pack
                -> send

你可以看到它有一棵树,它有一个父节点和前 2 个孩子(可以有更多),然后这些孩子有自己的孩子,依此类推。基本上想创建一个可以做到这一点的递归函数。

到目前为止,这是我的代码,只是无法获得整个递归部分以及它应该去哪里:

function get_project($options, $array_data=0) { // 可能传递数组

    $tasks = $this->get_data(); // gets data from database

    $subtasks = array();

        foreach($tasks as $task_id => $task) { 
            if($task->parent_task_id > 0 ) { 
                $subtasks[] = $task; 
                unset($tasks[$task_id]); 
            }
        }

        foreach($tasks as $task) { 
                $subtasks_final = array();
                    foreach($subtasks as $subtask_index => $subtask) { 
                        if($subtask->parent_task_id == $task->id) {  
                            $subtasks_final[] = $subtask; 
                            unset($subtasks[$subtask_index]); 
                        }
                    }
                    $tasks->subtasks = $subtasks_final; // somehow enter here recursive loop? 

        }   



    return $tasks;


}

【问题讨论】:

    标签: php mysql arrays recursion multidimensional-array


    【解决方案1】:
    function buildTree(array $elements, $parentId = 0) {
    $branch = array();
    
    foreach ($elements as $element) {
        if ($element['parent_id'] == $parentId) {
            $children = buildTree($elements, $element['id']);
            if ($children) {
                $element['children'] = $children;
            }
            $branch[] = $element;
        }
    }
    
    return $branch;
    }
    
    $tree = buildTree($rows);
    

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 2013-08-28
      • 1970-01-01
      相关资源
      最近更新 更多