Создадим коллекцию эллементов с именами:
$collection = collect([['name' => 'c'], ['name' => 'b'], ['name' => 'a']]);
Дампним и посмотрим что у нас там:
Collection {#581 ▼
#items: array:3 [▼
0 => array:1 [▼
"name" => "c"
]
1 => array:1 [▼
"name" => "b"
]
2 => array:1 [▼
"name" => "a"
]
]
}
А теперь отсортируем и дампним снова
dd($collection->sortBy('name'));
:
Collection {#566 ▼
#items: array:3 [▼
2 => array:1 [▼
"name" => "a"
]
1 => array:1 [▼
"name" => "b"
]
0 => array:1 [▼
"name" => "c"
]
]
}
Как видите порядок в коллекции изменился, теперь она отсортирована по имени. Но, ключи сохранились прежние, поэтому вызов dd($data[0],$data[1],$data[2]); выведет значения в старом порядке.
То есть сортировка будет сохранена при порядковом обходе коллекции, обращаясь по ключу вы нарушаете этот порядок.
Метод values() вернет новую коллекцию, в которой ключи сбросятся и будут пронумерованы заново, по порядку, то есть ключи будут соответствовать сортировке
$collection->values()
Если вы получаете коллекцию из БД, то эффективнее делать сортировку непосредственно на стороне БД, в остальных случаях учитывайте описанное поведение коллекций.