概要

yasuaki
お疲れ様です。yasuakiです。
現在進行中のお仕事で、Collectionをガンガン使うことになりそうなので
予習&復習してみました!
LaravelのCollectionとは?
Laravelの基本機能としてIlluminateSupportCollectionに配置されています。
配列を使いやすくするラッパークラスらしいです。
collect() を使うかnew Collection()でインスタンス化できます。
いろいろ格納してみる
多機能なので今日はとりあえずcollect, add, where, filterのみ使ってみました。
collect()
1.直接入力
直接文字列をいれると?
$collect = collect('hoge');
dd($collect);
結果:
Collection {#209 ▼
#items: array:1 [▼
0 => "hoge"
]
}
collectionクラスのitemsに値が入ってるのが確認できます。
2.配列
配列を指定すると?
$collect = collect(['aaa', 123, true]);
dd($collect);
結果:
Collection {#209 ▼
#items: array:3 [▼
0 => "aaa"
1 => 123
2 => true
]
}
3.連想配列
連想配列は?クラスは?
$collect = collect([
'aaa' => 'bbb',
'hoge' => 'fuga',
new Collection(['hoge' => 'fuga'])
]);
dd($collect);
結果:
Collection {#204 ▼
#items: array:3 [▼
"aaa" => "bbb"
"hoge" => "fuga"
0 => Collection {#209 ▼
#items: array:1 [▼
"hoge" => "fuga"
]
}
]
}
PHPの配列と同じように柔軟に追加されてますね。
collectヘルパーの実装を見に行ってみると、下記のようになっているので、new Collectionするのと同じですね。
function collect($value = null)
{
return new Collection($value);
}
$collection->add()する
addすると、コレクションに追加できます。
$items = new Collection();
$items->add('aaaa');
$items->add('bbb');
$items->add(123);
$items->add(true);
dd($items);
結果:
Collection {#209 ▼
#items: array:4 [▼
0 => "aaaa"
1 => "bbb"
2 => 123
3 => true
]
}
かならず0,1,2と添え字がついてくるみたいですね。
フィルターをかける
入ってるデータに対してフィルタリングして、必要な分だけ取り出したりできます。
$collection->where()する
whereでコレクションにフィルタリングできるようです。
$collect = collect([
['aaa' => 'bbb'],
['ccc' => 'ddd'],
['yyyy' => 'fff'],
])->where('ccc');
dd($collect);
結果:
Collection {#205 ▼
#items: array:1 [▼
1 => array:1 [▼
"ccc" => "ddd"
]
]
}
キーの値でフィルターをかけれるようです。
$collection->filter()する
こちらはコールバックでtrueだったもののみ、collectionに残すようです。
コールバックで全データ回して、trueのデータのみ返ってくるようでした!
$collect = collect([
['aaa' => 'bbb'],
['ccc' => 'ddd'],
['ddd' => 'ddd'],
['fff' => 'ddd'],
['yyyy' => 'fff'],
]);
$all = $collect->filter(function($value, $key){
return isset($value['ddd']);
});
dd($all);
結果:
Collection {#205 ▼
#items: array:1 [▼
2 => array:1 [▼
"ddd" => "ddd"
]
]
}
参考URL
collect, add, where, filterだけ見てみましたが、いろんなメソッドが用意されているので見てみてください。
Laravel 5.5 コレクション
コメント
「$collection->add()する」の部分で、
=================================
$items = new Collection();
$items->add(‘aaaa’);
$items->add(‘bbb’);
$items->add(123);
$items->add(true);
dd($items);
の結果が
=================================
Collection {#209 ▼
#items: array:3 [▼
0 => “aaaa”
1 => array:1 [▼
“hoge” => 123
]
2 => true
]
}
になる意味が理解できませんでした。
“bbb”がありませんし、”hoge”というのはどこから来たのでしょうか?
間違ってますね。
修正しました。ご指摘ありがとうございます🫡