Сортировка массива?
У вас неправильная позиция изначально. Вам нужно не линейный массив собирать, а дерево из аргументов и операторов.
Кто мешает в структуру [Приоритет, Операция] впилить и Позицию? Хотя зачем она вам? 
Вам нужно распарсить введенное выражение в удобную для обработки рекурсией или циклом форму.
Я бы стремился к такой записи (для 5+15*2/10+2^3):

array(
  0 => '2^3',
  1 => '2/10',
  2 => '15*{1}',
  3 => '5+{2}',
  4 => '{3}+{0},
);

Такой массив проходится одним циклом с простым switch. Но да, вопрос заключался в алгоритме такого разбора =).