Приветствую!
Помогите решить задачу. Я пытаюсь составить массив в котором есть задачи. У каждой задачи может быть родительский элемент.
Мне нужно, чтобы массив выглядел как иерархическое дерево, при этом каждый дочерний элемент был внутри родительского.
Array
(
[285] => Array
(
[id] => 285
[name] => Подготовить КП
[childid] => Array
(
[288] => Array
(
[id] => 288
[name] => Протокол
[childid] => Array
(
[286] => Array
(
[id] => 286
[name] => Подготовить договор
)
)
)
)
)
[289] => Array
(
[id] => 289
[name] => 234234
)
[298] => Array
(
[id] => 298
[name] => Посчитать ставки ст.Элисенваара - ст. Окуловка ст. Приозерск - ст. Окуловка (группа 21 и более, щебень в полувагонах и думпкарах) Просим Вас подобрать перевалку (тупик) для приёма нерудных материалов в районе д.Лысково Нижегородской области. Перевалка
)
)
$allready_added_child_tasks = array();
$SmarttasksObjects = new Object\Projecttask\Listing();
$SmarttasksObjects->setOrderKey("date");
$SmarttasksObjects->setOrder("desc");
foreach ($SmarttasksObjects as $task) {
if (!in_array($task->getId(), $allready_added_child_tasks)) {
$taskChildId = $task->getChildid();
$taskmemeber = $task->getMemberId();
if (isset($taskmemeber) && $taskmemeber) {
$exp_array = explode(',', $taskmemeber);
foreach ($exp_array as $SmarttasksIdObject) {
$smarttasks_array_member[] = $SmarttasksIdObject;
}
if (isset($smarttasks_array_member)) {
foreach ($smarttasks_array_member as $smartask_member) {
$SmarttasksObjects_array[$task->getId()]['id'] = $task->getId();
$SmarttasksObjects_array[$task->getId()]['name'] = $task->getName();
if ($taskChildId > 0) {
$childTask = Object_Projecttask::getById($taskChildId);
$SmarttasksObjects_array[$task->getId()]['childid'][$task->getChildid()]['id'] = $childTask->getId();
$SmarttasksObjects_array[$task->getId()]['childid'][$task->getChildid()]['name'] = $childTask->getName();
$child_childtaskid = $childTask->getChildId();
if ($child_childtaskid > 0) {
$child_childTask = Object_Projecttask::getById($child_childtaskid);
$SmarttasksObjects_array[$task->getId()]['childid'][$task->getChildid()]['childid'][$child_childtaskid]['id'] = $child_childTask->getId();
$SmarttasksObjects_array[$task->getId()]['childid'][$task->getChildid()]['childid'][$child_childtaskid]['name'] = $child_childTask->getName();
}
$allready_added_child_tasks[] = $childTask->getId();
}
}
}
}
}
}
Я могу это сделать вручную, но я понимаю, что это не совсем то.
if ($taskChildId > 0) {
$childTask = Object_Projecttask::getById($taskChildId);
$SmarttasksObjects_array[$task->getId()]['childid'][$task->getChildid()]['id'] = $childTask->getId();
$SmarttasksObjects_array[$task->getId()]['childid'][$task->getChildid()]['name'] = $childTask->getName();
$child_childtaskid = $childTask->getChildId();
if ($child_childtaskid > 0) {
$child_childTask = Object_Projecttask::getById($child_childtaskid);
$SmarttasksObjects_array[$task->getId()]['childid'][$task->getChildid()]['childid'][$child_childtaskid]['id'] = $child_childTask->getId();
$SmarttasksObjects_array[$task->getId()]['childid'][$task->getChildid()]['childid'][$child_childtaskid]['name'] = $child_childTask->getName();
}
$allready_added_child_tasks[] = $childTask->getId();
}
Как сделать более изящное решение?