с помощью array_multisort получу массив с новым порядком. Это и так получилось через пару foreach.
Так понял что для объектов нет подобной функции как array_multisort, которая выдавала бы также объект.
Вопрос в том как собрать новый объект с такой вложенностью из массива.