Остерегайтесь примеров, которые просто делают это рекурсивно.
Php может создавать массивы со ссылками на другие места в этом массиве и может содержать объекты с аналогичной рекурсивной ссылкой, и любой чисто рекурсивный алгоритм может быть рассмотрен в таком случае как ОПАСНО наивный, в котором он переполняет глубину стека и никогда не завершается.
(что ж, он прекратит работу, когда он превысит глубину стека, и в этот момент ваша программа будет фатально прервана, а не то, что я думаю, вы хотите)
В прошлом я пытался сериализовать -> заменять маркеры ссылок на строки -> десериализовать для своих нужд (часто отладка обратных трасс с множеством рекурсивных ссылок в них), что, кажется, работает нормально, вы везде получаете дыры, но это работает для этой задачи.
Для вашей задачи, если вы обнаружите, что в вашем массиве / структуре есть рекурсивные ссылки, вы, возможно, захотите взглянуть на комментарии, добавленные пользователем здесь: http://php.net/manual/en/language.references.spot.php
и затем каким-то образом найти способ подсчитать глубину рекурсивного пути.
Возможно, вам понадобится вынуть ваши книги CS по алгоритмам и поразить этих детей:
(Извините за краткость, но углубление в теорию графов немного больше, чем подходит для этого формата;))