Сделать массив операций с заранее известными ключами:
array(
'^' => array(),
'*' => array(),
'/' => array(),
'+' => array(),
'-' => array(),
);
А дальше его заполнять найденными позициями. Потом просто в цикле проходить по нему сверху вниз. Другое дело, что позиции тоже как-то несерьезно. Может лучше собрать элементы выражения в стек и использовать не позицию в выражении, а номер элемента в стеке.