LaravelのCollectionとArrayの違い – どちらを使うべきか?
Laravelでは、データを扱う際に Collection と Array の両方を使用できます。しかし、それぞれの特徴や利点が異なります。以下で詳細を比較し、適切な場面で使い分けましょう。
1. CollectionとArrayの違い
特徴 | Collection (Illuminate\Support\Collection ) |
Array (array ) |
---|---|---|
データ構造 | オブジェクト (object ) |
配列 ([] ) |
便利なメソッド | ✅ map() , filter() , pluck() , each() など |
array_map() , array_filter() , array_reduce() など |
イミュータブル | ✅ 変更不可な場合あり | ❌ 変更可能 |
JSONとの互換性 | ✅ toJson()
|
✅ json_encode()
|
Eloquentとの互換性 | ✅ User::all() で取得可 |
❌ 直接は不可 |
2. Collectionを使うべき場合
2.1. データを柔軟に操作したいとき
Collectionは多くの便利なメソッドを提供しており、データを簡単に操作できます。
$users = collect([
['name' => 'A', 'age' => 25],
['name' => 'B', 'age' => 30],
['name' => 'C', 'age' => 20],
]);
// 25歳以上のユーザーを取得
$filtered = $users->filter(fn($user) => $user['age'] > 25);
dd($filtered->all()); // [['name' => 'B', 'age' => 30]]
2.2. Eloquentモデルを扱うとき
EloquentはデフォルトでCollectionを返します。
$users = User::all(); // Collectionが返る
$names = $users->pluck('name'); // 名前のリストを取得
2.3. map, reduce, filter, sort などの処理を簡単にしたいとき
$numbers = collect([1, 2, 3, 4, 5]);
$squared = $numbers->map(fn($num) => $num * $num); // 各数値を2乗
dd($squared->all()); // [1, 4, 9, 16, 25]
3. Arrayを使うべき場合
3.1. 小規模データでシンプルな処理をしたいとき
特にデータの変換などが不要な場合、Arrayで十分です。
$users = [
['name' => 'Alice', 'age' => 25],
['name' => 'Bob', 'age' => 30],
];
foreach ($users as $user) {
echo $user['name'] . "\n";
}
3.2. パフォーマンスを重視するとき
Collectionはオブジェクトのため、Arrayの方がメモリ消費が少なく、処理が速いことがあります。
3.3. APIレスポンスとしてデータを返すとき
Collectionの toJson() も使えますが、場合によってはArrayの方が扱いやすいことがあります。
$users = User::all()->toArray(); // Collection → Arrayに変換
return response()->json($users);
4. 結論
ケース | 推奨するデータ型 |
---|---|
データをフィルタリング・マッピング・ソートしたい | ✅ Collection |
シンプルなデータ処理(ループのみ) | ✅ Array |
Eloquentのデータを扱う | ✅ Collection |
JSONレスポンスを返す | ✅ ArrayまたはCollection (toJson() ) |
👉 まとめ
- データを柔軟に処理するなら → Collection
- シンプルな処理やパフォーマンス重視なら → Array
以上。