標題の通りです。collectionをsortなどで並び替えた際に、デフォルトだとインデックスキーが変わらないのです。
どういうことかというと
基のcollectionのインデックスキーは 0 ~ 9並んでいます。
Illuminate\Support\Collection {#1022 ▼ #items: array:10 [▼ 0 => array:2 [▶] 1 => array:2 [▶] 2 => array:2 [▶] 3 => array:2 [▶] 4 => array:2 [▶] 5 => array:2 [▶] 6 => array:2 [▶] 7 => array:2 [▶] 8 => array:2 [▶] 9 => array:2 [▶] ] #escapeWhenCastingToString: false
これを、例えばarray:2の中の情報を基に並び替えるとします。
collection->sortByDesc(‘XXXX’) みたいに降順にします。
collectionの中身は並び変わるが、インデックスキーは基のままです。
Illuminate\Support\Collection {#1304 ▼ #items: array:10 [▼ 1 => array:2 [▶] 2 => array:2 [▶] 5 => array:2 [▶] 3 => array:2 [▶] 0 => array:2 [▶] 6 => array:2 [▶] 7 => array:2 [▶] 8 => array:2 [▶] 9 => array:2 [▶] 4 => array:2 [▶] ] #escapeWhenCastingToString: false
これを並び替えと同時に、インデックスキーも0 ~ 9へ並び替えたい
最後に、values()のメソッドを追加すればOKです。
collection->sortByDesc('XXXX')->values();
こうすることで、並び替わるのと同時にインデックスキーも0~9に振り返られています。(中身が見えないので、変わっているのか分かりづらいですね…)
Illuminate\Support\Collection {#1340 ▼ #items: array:10 [▼ 0 => array:2 [▶] 1 => array:2 [▶] 2 => array:2 [▶] 3 => array:2 [▶] 4 => array:2 [▶] 5 => array:2 [▶] 6 => array:2 [▶] 7 => array:2 [▶] 8 => array:2 [▶] 9 => array:2 [▶] ] #escapeWhenCastingToString: false }