Laravel初心者向け、よく使うCollectionのフィルタリング系メソッド

## 概要

自分が普段仕事で良く使うCollectionのメソッドを抜粋して紹介します。
EloquentCollection特有のメソッドは除外しています

## そもそもCollectionとは
GPT「
Laravelにおける「Collection」は、データを効果的かつ柔軟に処理するための便利なクラスです。これはPHPの標準的な配列を拡張し、多くの操作やメソッドを提供するものです。
」

データの集まりを色々操作しやすくしている配列の拡張版みたいなものという解釈でOKです。
配列をCollectionに変換して利用するのが一般的です。

https://readouble.com/laravel/10.x/ja/collections.html

## 一覧
### all
`all`メソッドはコレクションを配列に変換します
```php
$collection = collect([
    ['name' => 'John', 'age' => 30],
    ['name' => 'Jane', 'age' => 25],
    ['name' => 'Doe', 'age' => 35],
]);

dd($collection->all());

// 結果:
//array:3 [▼ 
// 0 => array:2 [▼
//    "name" => "John"
//    "age" => 30
//  ]
//  1 => array:2 [▼
//    "name" => "Jane"
//    "age" => 25
//  ]
//  2 => array:2 [▼
//    "name" => "Doe"
//    "age" => 35
//  ]
//]
```

https://readouble.com/laravel/10.x/ja/collections.html#method-all

### where
`where`メソッドは、コレクション内の要素を特定の条件でフィルタリングします。

```php
$collection = collect([
    ['name' => 'John', 'age' => 30],
    ['name' => 'Jane', 'age' => 25],
    ['name' => 'Doe', 'age' => 35],
]);

$filtered = $collection->where('age', '>=', 30);
dd($filtered->all());

// 結果:
//array:2 [▼ 
//  0 => array:2 [▼
//    "name" => "John"
//    "age" => 30
//  ]
//  2 => array:2 [▼
//    "name" => "Doe"
//    "age" => 35
//  ]
//]
```

厳密な比較を行いたい時は`whereStrict()`を使いましょう

https://readouble.com/laravel/10.x/ja/collections.html#method-where

### whereIn
`whereIn`メソッドは、第一引数のキーに対して、第二引数の配列に含まれてる値を持つ要素をフィルタリングします。


```php
$collection = collect([
    ['name' => 'John', 'age' => 30],
    ['name' => 'Jane', 'age' => 25],
    ['name' => 'Doe', 'age' => 35],
]);

$filtered = $collection->whereIn('age', [30,35]);
dd($filtered->all());

// 結果:
//array:2 [▼ 
//  0 => array:2 [▼
//    "name" => "John"
//    "age" => 30
//  ]
//  2 => array:2 [▼
//    "name" => "Doe"
//    "age" => 35
//  ]
//]
```

https://readouble.com/laravel/10.x/ja/collections.html#method-wherein

### first
`first`メソッドは、コレクションの最初の要素を取得します。

```php
$collection = collect([
    ['name' => 'John', 'age' => 30],
    ['name' => 'Jane', 'age' => 25],
    ['name' => 'Doe', 'age' => 35],
]);

$filtered = $collection->first();
dd($filtered);

// 結果:
//array:2 [▼ 
//  "name" => "John"
//  "age" => 30
//]

```

https://readouble.com/laravel/10.x/ja/collections.html#method-first
### firstWhere
`firstWhere`メソッドは文字通り`first`メソッドと`where`メソッドをセットにしたメソッドです。
条件に一致した最初の要素を取得します。

```php
$collection = collect([
    ['name' => 'John', 'age' => 30],
    ['name' => 'Jane', 'age' => 25],
    ['name' => 'Doe', 'age' => 35],
]);

$filtered = $collection->firstWhere('age', '>=', 30);
dd($filtered);

// 結果:
//array:2 [▼ 
//  "name" => "John"
//  "age" => 30
//]

```

https://readouble.com/laravel/10.x/ja/collections.html#method-first-where
### filter
`filter`メソッドは、引数に受け取ったコールバック関数内で条件に一致した要素を取得します。

```php
$collection = collect([
    ['name' => 'John', 'age' => 30],
    ['name' => 'Jane', 'age' => 25],
    ['name' => 'Doe', 'age' => 35],
]);


$filtered = $collection->filter(function (array $value){
    return $value['age'] >= 26;
});
dd($filtered->all());

//array:2 [▼ 
//  0 => array:2 [▼
//    "name" => "John"
//    "age" => 30
//  ]
//  2 => array:2 [▼
//    "name" => "Doe"
//    "age" => 35
//  ]
//]
```

#### whereメソッドとの違い

whereメソッドの実態コードを見てみましょう。中でfilterメソッドを使っています。
単純な絞り込みをする際には`where`メソッドの方がスマートに書けます。
複雑な絞り込みの際には`filter`メソッドを使いましょう。

```php
public function where($key, $operator = null, $value = null)
{
    return $this->filter($this->operatorForWhere(...func_get_args()));
}
```

https://readouble.com/laravel/10.x/ja/collections.html#method-filter
### contains
`contains`メソッドは、指定した条件に一致する要素が存在する場合にtrueを返します。
`filter`メソッドのようにコールバック関数を引数に与える事も可能です

```php
$collection = collect([
    ['name' => 'John', 'age' => 30],
    ['name' => 'Jane', 'age' => 25],
    ['name' => 'Doe', 'age' => 35],
]);

dd($collection->contains('age',25));
// 結果:
//true
```

```php
$collection = collect([1, 2, 3, 4, 5]);

$collection->contains(function (int $value, int $key) {
    return $value > 5;
});
// 結果:
// false
```

https://readouble.com/laravel/10.x/ja/collections.html#method-contains


### pluck
`pluck`メソッドは指定したキーの値だけを取得します。
配列を引数に渡して複数のキーの値を取り出すことも出来ます。

```php
$collection = collect([
    ['name' => 'John', 'age' => 30],
    ['name' => 'Jane', 'age' => 25],
    ['name' => 'Doe', 'age' => 35],
]);

$names = $collection->pluck('name');
dd($names->all());
```

```php
$collection = collect([
    ['product_id' => 'prod-100', 'name' => 'Desk'],
    ['product_id' => 'prod-200', 'name' => 'Chair'],
]);

$plucked = $collection->pluck('name', 'product_id');

dd($plucked->all());

// 結果:
['prod-100' => 'Desk', 'prod-200' => 'Chair']
```

https://readouble.com/laravel/10.x/ja/collections.html#method-pluck


### isEmpty
`isEmpty`メソッドは、collectionが空の場合にtrueを返します。
逆に空じゃない時にtrueを返す`isNotEmpty()`もあります。

```php
$collection = collect([
    ['name' => 'John', 'age' => 30],
    ['name' => 'Jane', 'age' => 25],
    ['name' => 'Doe', 'age' => 35],
]);

dd($collection->isEmpty());

// 結果:
// false
```


https://readouble.com/laravel/10.x/ja/collections.html#method-isempty