Есть многомерный массив с неизвестной вложенностью. Нужно его обойти до определенного уровня(на данный момент 5) и записать данные в свой массив. Обход написал при помощи пятиуровневого foreach, но выглядит как-то не красиво:
$ hierarchy = []; // Build data tree for five referrals levels // First level foreach ($ manager->getReferrals($ user) as $ fistKey => $ firstLvl) { $ hierarchy[$ fistKey] = [ 'key' => $ firstLvl['user']['id'], 'title' => $ firstLvl['user']['username'], ]; // Second level foreach ($ firstLvl['__children'] as $ secondKey => $ secondLvl) { $ hierarchy[$ fistKey]['children'][$ secondKey] = [ 'key' => $ secondLvl['user']['id'], 'title' => $ secondLvl['user']['username'], ]; // Third level foreach ($ secondLvl['__children'] as $ thirdKey => $ thirdLvl) { $ hierarchy[$ fistKey]['children'][$ secondKey]['children'][$ thirdKey] = [ 'key' => $ thirdLvl['user']['id'], 'title' => $ thirdLvl['user']['username'], ]; // Fourth level foreach ($ thirdLvl['__children'] as $ fourthKey => $ fourthLvl) { $ hierarchy[$ fistKey]['children'][$ secondKey]['children'][$ thirdKey]['children'][$ fourthKey] = [ 'key' => $ fourthLvl['user']['id'], 'title' => $ fourthLvl['user']['username'], ]; // Fifth level foreach ($ fourthLvl['__children'] as $ fiveKey => $ fiveLvl) { $ hierarchy[$ fistKey]['children'][$ secondKey]['children'][$ thirdKey]['children'][$ fourthKey]['children'][$ fiveKey] = [ 'key' => $ fiveLvl['user']['id'], 'title' => $ fiveLvl['user']['username'] ]; } } } }
Как можно это оптимизировать? Нужна рекурсия или можно и при помощи циклов решить эту задачу?