diff --git a/phpmyfaq/src/phpMyFAQ/Category/Order.php b/phpmyfaq/src/phpMyFAQ/Category/Order.php index a3e7dc4049..d43ec80729 100644 --- a/phpmyfaq/src/phpMyFAQ/Category/Order.php +++ b/phpmyfaq/src/phpMyFAQ/Category/Order.php @@ -124,11 +124,16 @@ public function setCategoryTree( public function getCategoryTree(array $categories, int $parentId = 0): array { $result = []; + $stack = [[$parentId, &$result]]; - foreach ($categories as $category) { - if ((int) $category['parent_id'] === $parentId) { - $children = $this->getCategoryTree($categories, $category['category_id']); - $result[$category['category_id']] = $children; + while (!empty($stack)) { + list($currentParentId, &$currentResult) = array_pop($stack); + + foreach ($categories as $category) { + if ((int) $category['parent_id'] === $currentParentId) { + $currentResult[$category['category_id']] = []; + $stack[] = [$category['category_id'], &$currentResult[$category['category_id']]]; + } } }