Laravel / collectionでsort.インデックスキーが変わらない問題

標題の通りです。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
 }

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です