【发布时间】: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