findBy(['parent' => null], ['name' => 'ASC']); } /** * Gets a flattened hierachical tree. Useful for generating option lists. * @param StructuralDBElement|null $parent This entity will be used as root element. Set to null, to use global root * @return StructuralDBElement[] A flattened list containing the tree elements. */ public function toNodesList(?StructuralDBElement $parent = null): array { $result = array(); $entities = $this->findBy(['parent' => $parent], ['name' => 'ASC']); /** * I think it is very difficult to replace this recursive array_merge, * so if you want to change it you should have a better idea than adding each list to $result array * and do an array_merge(...$result) at the end. */ foreach ($entities as $entity) { /** @var StructuralDBElement $entity */ $result[] = $entity; $result = array_merge($result, $this->toNodesList($entity)); } return $result; } }