get(); $result = []; $this->buildAlbumTree($result, $allAlbums); return $result; } private function buildAlbumTree(array &$result, $allAlbums, Album $parent = null, $level = 0) { $parentAlbums = []; foreach ($allAlbums as $album) { if ((is_null($parent) && is_null($album->parent_album_id)) || (!is_null($parent) && $album->parent_album_id == $parent->id)) { $parentAlbums[] = $album; } } foreach ($parentAlbums as $album) { $album->display_name = trim(sprintf('%s %s', str_repeat('-', $level), $album->name)); $result[$album->id] = $album; $this->buildAlbumTree($result, $allAlbums, $album, $level + 1); } } }