В каком массиве? Все id доступны и так через атрибут. Здесь нужно понять логику, что закрывать нужно не только непосредственных детей, но и внуков и правнуков. А в процедуре скрытия есть проверка только на непосредственного родителя перед скрытием.
У выбранного родителя бывают внуки, для которых собственные родители также являются детьми для выбранного. В приведённом коде нет проверки на внуков перед сокрытием.
Переделай на ul, вложенные списки вкладывай в li, прошиши класс типа li.active>*{ display block} и при клике добавляй/убирай класс active, тогда всё будет нормально рабоать