Ну вот тебе алгоритм - при пробежке по списку ты всегда помнишь предыдущий товар, делаешь список $previous_goods
возьмем например, что в списке товары выстроились сортировкой так 1,3,5,2,4
$previous_goods == (1=>0, 3=>1, 5=>3, 2=>5, 4=>2)
ну и слепить из него обратный $next_goods == (1=>3, 3=>5, 5=>2, 2=>4, 4=>0) несложно