LaravelでCollectionを使う!

Laravel

概要

ヤスケ(左向き)
ヤスケ

お疲れ様です。ヤスケです。
現在進行中のお仕事で、Collectionをガンガン使うことになりそうなので
予習&復習してみました!

LaravelのCollectionとは?

Laravelの基本機能としてIlluminate\Support\Collectionに配置されています。
配列を使いやすくするラッパークラスらしいです。
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:3 [▼
    0 => "aaaa"
    1 => array:1 [▼
      "hoge" => 123
    ]
    2 => 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 コレクション

コメント

タイトルとURLをコピーしました