На самом деле цикл берется из проверки потомков, взависимости от количества потомков, зная новое значение родителя после перемещения, имея цикл легко создать потомков увеличивая cat_left и уменьшая cat_right на $i, это очень логическое решешие проблемы.
Я не вникала в код function moveAll, т.к. хочу разабраться сама и почти написала свои функции для работы с этим алгоритном, осталось разобраться с перемещением, бьюсь целую неделю, до конца не могу нащупать универсальный путь.
СПАСИБО!