@gistol

Как добавить элемент в нужном месте к родительскому в массиве?

Приветствую!

Помогите решить задачу. Я пытаюсь составить массив в котором есть задачи. У каждой задачи может быть родительский элемент.

Мне нужно, чтобы массив выглядел как иерархическое дерево, при этом каждый дочерний элемент был внутри родительского.
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();
								}


Как сделать более изящное решение?
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы