ドキュメント Laravel 9.x で コレクションを確認すると
Illuminate\Support\Collectionクラスは
配列データを操作するための、書きやすく使いやすいラッパーです。
なんのこっちゃ。。。。
理解力が足りない私がコレクションについて深掘りします。
ラッパーとは.....
まず、ラッパーって 歌う方のラッパー?となりましたが 歌う方のラッパー = Rapper
ここで出てくるラッパー = Wrapper
全然、別物でした。
Wrapper = 包装紙、カバー、覆うもの、包むもの、などの意味を持つ英単語。
ソフトウェアやプログラム部品などが提供するクラスや関数、データ型などを、本来とは異なる環境や方法で利用できるようにしたものをラッパーという。
勝手な解釈
Wrapper=元々ある複雑で持ちにくい荷物をWrapperで包んで持ちやすくします!
という雰囲気です。。。
まず結論として、
コレクション型とは、配列のデータを簡単に扱うための型で
コレクション型も配列も使い分けが必要。
私なりに、わかりやすく説明します。
それではまず、同じデータを配列とコレクションで見比べてみます。
配列のデータ
array:3 [
0 => array:2 [ "id" => 1 "name" => "John" ]
1 => array:2 [ "id" => 2 "name" => "Jane" ]
2 => array:2 [ "id" => 3 "name" => "Doe" ]
]
コレクション型のデータ
Illuminate\Support\Collection {#1
#items: array:3 [
0 => array:2 [ "id" => 1 "name" => "John" ]
1 => array:2 [ "id" => 2 "name" => "Jane" ]
2 => array:2 [ "id" => 3 "name" => "Doe" ]
]
}
異なる点
- 配列の場合 = 直でデータが入っている。
- コレクション型の場合 = #items:という謎のもので包まれている。
コレクションは、ラッパーに包まれているんです!!!
コレクションはlaravelに含まれる機能で、
コレクションのおかげでたくさんのメソッドが使えるんです!!!
メソッドとは.....
方法、方式、手法、やり方、などの意味を持つ英単語。
オブジェクト指向プログラミングにおけるオブジェクトに対する手続きのことや、
通信プロトコルにおける要求の種類などのことをメソッドということが多い
配列とコレクションで同じ事をする場合を比べてみます!!!
まずは、同じデータを配列VerとコレクションVerを確認します。
配列Verのデータ
$users = [
['id' => 1, 'name' => 'John'],
['id' => 2, 'name' => 'Jane'],
['id' => 3, 'name' => 'Doe'],
];
コレクションVerのデータ
$users = collect([
['id' => 1, 'name' => 'John'],
['id' => 2, 'name' => 'Jane'],
['id' => 3, 'name' => 'Doe'],
]);
説明:
usersに3人のidと名前の情報を格納します。
コレクションVerは、collectで変換しています。
配列の場合とコレクションでメソッドを使って行う場合を比べてみます。
フィルター機能
配列の場合$filteredUsers = array_filter($users, function($user) {
return $user['id'] > 1;
});
コレクションの場合
$filteredUsers = $users->where('id', '>', 1);
説明:
filteredUsersにidが1以上のユーザーだけを格納します。
並び替え機能
配列の場合$sortedUsers = $users;
usort($sortedUsers, function($a, $b) {
return $a['name'] <=> $b['name'];
});
コレクションの場合
$sortedUsers = $users->sortBy('name');
説明:
sortedUsersに名前順で並び替えを行なっています。
合計計算機能
配列の場合$total = array_reduce($users, function($carry, $user) {
return $carry + $user['id'];
}, 0);
コレクションの場合
$total = $users->sum('id');
説明:
totalにidの合計数を格納します。
上記は一例ですが
コレクションだと、綺麗にわかりやすくコードをまとめることができます!
ただ、コレクションはlaravelの機能なので、
案件などによって、色々なフレームワークを使う方は
配列でのやり方を知っていた方が良いのかな。。。とも思ったりします。
また、何か新しいことを発見した際は 追記していきます!!!