Utility

コレクションを任意の順番で並び替える

コレクションを任意の順番で並び替える PHPを使っていると、「任意に順番を並び替えたキーに沿って、連想配列を並び替えたい」ということが意外と面倒くさかったりする。 MySQLでいう ORDER BY FIELD(field, idx1, idx2, idx3) みたいなやつ。 Collectionクラスを用いると簡単にできそうだな〜と思ったのでメモ。 $order = [2, 1, 3]; $data = collection([ ['id' => 1, 'name' => 'John'], ['id' => 2, 'name' => 'Alice'], ['id' => 3, 'name' => 'Yui'], ]); $orderMap = array_flip($order); $data = $data->sortBy( function ($datum) use ($orderMap) { return $orderMap[$datum->id]; }, SORT_ASC ) ->compile(false); 何をしているかというと、 array_flipでもとの並び順を覚えさせて 対応順にarrayに位置を教えてあげる というだけのもの。 Collectionクラスは、以前にQiitaにも書いた。 とても便利で強力なUtilityなので、使いこなしたい。 [CakePHP3]現場で使えるCollectionクラスの15選 - Qiita