【Laravel】コレクション配列とは?使い方とメリットを解説!
この記事からわかること
- Laravelのコレクションとは?
- 配列を操作できる?
- 使い方や作成方法、メリット
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
LaravelのEloquent(エロクアント)を学習中、「コレクション(collection)」というのが出てきたので自分なりにまとめてみました。
コレクション(collection)とは?
コレクションはLaravel独自の形式で配列を操作する機能が拡張されたラッパークラスです。
使い方は簡単で配列をコレクション形式に変換後、定義されているメソットを呼び出すことで様々な操作や機能を簡単に実装することができます。
コレクションの実態はオブジェクト(コレクションインスタンス)でその中に配列本体が格納されています。
$collection = collect([1, 2, 3]);
var_dump($collection);
// 結果:object(Illuminate\Support\Collection)#279 (2) { ["items":protected]=> array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } ["escapeWhenCastingToString":protected]=> bool(false) }
またEloquent(エロクアント)の返り値は自動的にコレクション配列に変換されます。名前空間は違いますが操作できることに違いはありません。
$records = User::all();
var_dump($records);
// 結果:object(Illuminate\Database\Eloquent\Collection)#327 (2) { ["items":protected]=> array(42) { [0]=> object(App\Models\.....
コレクション配列の作成方法
コレクション配列を作成(変換)するには、配列に対してcollectメソッド(ヘルパ)
を使用します。
$collection = collect([1, 2, 3]);
collectメソッド
は返り値としてコレクションインスタンスを返すので変数で受け取ります。
var_dump($collection);
// 結果:object(Illuminate\Support\Collection)#279 (2) { ["items":protected]=> array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } ["escapeWhenCastingToString":protected]=> bool(false) }
このコレクションインスタンスのメソッドをメソッドチェーン形式で呼び出すことで配列を操作することが可能になります。またメソッドチェーンで扱うので返り値に更新されたコレクションインスタンスが常に渡るため、元の配列の形は保持されたままであることもメリットの1つです。
豊富なメソッドや操作できること
コレクションインスタンスを受け取ったら定義済みの沢山あるメソッドで様々な操作が可能になります。
参照記事:公式:コレクション
メソッドとできること
- all:配列表現を返す
- avg:平均値を出す
- chunk:コレクションを分割
- collapse:コレクション同士を結合
- combine:コレクションと値を結合
- count:コレクションの個数をカウント
- countBy:同じ値の数をカウント
- diff:コレクション同士の差分を取得
- each:コレクションの中身をループで取り出す
- except:指定した値以外を取得
- filter:フィルタリング
- flip:キーと値を入れ替え
- forget:キー指定で削除
- get:キー指定の値を取得
- groupBy:キー値毎にグループ化
- has:存在するか識別
- isEmpty:コレクションが空ならtrue
- isNotEmpty:コレクションが空ならfalse
- join:コレクションの値を指定文字で結合
- push:コレクションの最後に値を追加
- pop:コレクションの最後の値を削除
- range:指定した2つの値の範囲内を返す
- search:値を検索
- shuffle:コレクションの値をシャッフル
- sort:ソート
- sum:全値の合計
- toArray:配列へ変換
- toJson:JSONへ変換
- where:キー値と値でフィルタリング
中でもよく使うメソッドの使い方
allメソッド
コレクションを解除して配列として返します。
$collection = collect([1, 2, 3, 4]);
var_dump($collection);
// object(Illuminate\Support\Collection)#279 (2) { ["items":protected]=> array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) } ["escapeWhenCastingToString":protected]=> bool(false) }
var_dump($collection->all());
// array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) }
countメソッド
コレクションの個数をカウントできるメソッドです。返り値に個数が渡ります。
$collection = collect([1, 2, 3, 4]);
echo $collection->count(); // 4
diffメソッド
2つのコレクションの差分(一致しないもの)をコレクション形式で返します。
$collection = collect([1, 2, 3, 4, 5]);
$diff = $collection->diff([2, 4, 6, 8]);
var_dump($diff->all()); // array(3) { [0]=> int(1) [2]=> int(3) [4]=> int(5) }
eachメソッド
コレクション内の値とキー値をループで取り出すことができます。
$collection = collect([1, 2, 3, 4]);
$collection->each(function ($item, $key) {
echo $item; // 1,2,3,4
});
everyメソッド
コレクション内の値とキー値をループで検証し、全要素がルールを満たせばtrue
、1つでも満たさなければfalse
を返す。
$collection = collect([1, 2, 3, 4]);
if($collection->every(function ($value, $key) {
return $value > 0;
})){
echo "true"; // true
}else{
echo "false";
}
filterメソッド
コレクション内の値とキー値をループで検証し、フィルター条件に満たした値のみのコレクションを返す。
$collection = collect([1, 2, 3, 4]);
$filtered = $collection->filter(function ($value, $key) {
return $value > 2;
});
var_dump($filtered->all()); // array(2) { [2]=> int(3) [3]=> int(4) }
getメソッド
引数に指定された値のキー値があればその値を、なければnull
を返す。第二引数にない場合のデフォルト値を指定可能。
$collection = collect(['name' => 'ame', 'framework' => 'laravel']);
echo $value = $collection->get('framework'); // laravel
echo $value = $collection->get('language'); // null
echo $value = $collection->get('language','php'); // php
hasメソッド
引数に指定された値のキー値があればtrue
、なければfalse
を返す。引数は複数指定可能。
$collection = collect(['user_id' => 1, 'name' => 'ame','language' => 'php', 'framework' => 'laravel']);
$collection->has('framework'); // true
$collection->has('framework','app'); // false
joinメソッド
引数に指定された値でコレクションの値を結合。第二引数にも指定した場合は最後の値のみ適応。
$collection = collect(['user_id' => 1, 'name' => 'ame', 'language' => 'php', 'framework' => 'laravel']);
var_dump($collection->join('-')); // string(17) "1-ame-php-laravel"
var_dump($collection->join('-',':')); // string(19) "1-ame-php:laravel"
searchメソッド
引数に指定された値を検索し、そのキー値を返す。
$collection = collect(['user_id' => 1, 'name' => 'ame', 'language' => 'php', 'framework' => 'laravel']);
echo $collection->search('php'); // language
まだまだ勉強中ですので至らぬ点や間違っているところがございましたらご指摘いただけると嬉しいです。
ご覧いただきありがとうございました!