PHPを扱っていると配列を度々使うことがあります。
PHPに備わっている配列の機能だけだと、扱いづらかったりすることありますよね。
今回はPHP内で配列を扱う際に多機能で使いやすいcollectionをご紹介します。
通常の配列に様々な機能を付けて扱うことができるので、とても便利でおすすめです。
目次
collectionはフレームワークLaravelに含まれている
PHPのcollectionはPHPそのものに導入されているものではなく、collectionはPHPのシステム開発を効率化させることができるフレームワークの1つであるLaravelに含まれています。
なのでPHPでcollectionを使うのなら、まずはLaravelを導入しておく必要があります。
Laravel
http://laravel.jp/
先程も記載した通りPHPにはシステム開発を効率化させることができるフレームワークを導入することができます。
導入できるフレームワークはいくつもあり、そのうちの1つとしてLaravelがあります。
Laravelはシステム全体をModel(データ処理)・View(画面表示)・Controller(全体の防御)の各機能に分け、これらをパーツごとに作成開発できるようにしてくれます。
多機能なフレームワークで実装部分の開発工数を減らすことができ、経験の浅い初心者エンジニアでも対応できるフレームワークとして有名です。
PHPで開発を始めたばかりでフレームワークの導入を考えているなら、まずはLaravelがおすすめです。
collectionを使えば配列が多機能になって便利
collectionはLaravelに含まれているもので、配列を代入することで以下のような機能をもたせることができます。
関数名 | 機能 |
---|---|
toArray | collectionを配列に変換する |
each | collectionから要素を1つずつ取り出す |
filter | 条件をつけて要素を取り出す |
map | 格納されているすべての要素に同じ処理を行う |
sort | collection内のデータを並び替える |
条件をつけて必要な要素を取り出したり、格納されている要素全てに同じ処理をかけるなど、便利な機能が多数あります。
ここからはcollectionに配列を代入する方法と、上記表で紹介した5つの関数の詳細な使い方を1つずつご紹介していきます。
collectionにはcollectを使って配列を代入
サンプルプログラムからcollectionにcolletを使って配列を代入する方法を紹介します。
collectionとして変数に配列を入れるには、そのまま代入演算子を使っても入れることはできず、collectを使う必要があります。
以下のようにcollectを使って代入していきます。
1 |
$collection = collect([1,3,5,11,13]); |
こうすることで配列として代入され、collection内の関数を使えるようになります。通常の配列を代入していくように代入してもcollectionの扱いにはならないので注意が必要です。
collectionを配列に変換する
collectを使えば配列を代入することができますが、中身を表示する際には配列に変換する必要があります。
collectionの中身を配列に変換してくれるのがtoArray関数です。
以下のようにtoArray関数を使うことでcollectionの中身を配列に変換してくれます。
1 2 |
$collection = collect([1,3,5,11,13]); print_r($collection -> toArray()); |
これを実行すると以下のように表示されます。
1 2 3 4 5 |
Array( [0] => 1 [1] => 3 [2] => 5 [3] => 11 [4] => 13) |
きちんと配列として認識され、print_rによって配列の中身が表示されます。
collectionから要素を一個ずつ取り出す
定義されたcollectionは基本配列であり、取り出す際配列全体が指定されてしまいます。
collectionから要素を1つずつ取り出す場合はeach関数を使います。
以下のように記述することで要素を上から順番に取り出せます。
1 2 |
$collection = collect([1,3,5,11,13]); $collection -> each(function ($item)); |
上記内の$item部分にif文などで条件をつければ、条件に一致したものだけを取り出すことなどができます。
collectionから条件をつけて要素を取り出す
要素を一個ずつ取り出すことができるeachですが、普通に使うと上から順番に取り出していくことになります。
何かしら条件をつけて取り出したい場合はif文などを使うことになりますが、collectionではfilter関数というものがあります。
これはif文を使わなくても、条件をつけて要素を取り出すことができる関数です。以下のようにfilter関数を使うことで、指定した条件にあった要素だけを取り出せます。
1 2 |
$collection = collect([1,3,5,11,13]); $filter = $collection -> filter(function ($value, $key){return $value all()); |
上記を実行すると以下のように配列内で6以下のものが結果に表示されます。
1 2 3 |
Array( [0] => 1 [1] => 3 [2] => 5 ) |
if文を使わずともfilterを使えば簡単に条件を付けて要素を取り出すことが可能です。
collectionの各要素に同じ処理を行う
格納されている要素全てに同じ処理を行いたいなら、1個ずつ取り出して処理するよりも、map関数を使うのが便利です。
以下のようにmapを使って処理を行えば、格納されている要素全てに同じ処理を行ってくれます。
1 2 3 4 5 6 7 8 9 |
$collection = collect([1,3,5,11,13]); $mapcollect = $collection -> map(function ($item, $key){ return $item + 7;}); echo '$collection:'; print_r($collection -> all()); echo ' '; echo '$mapcollect:'; print_r($mapcollect -> all()); |
上記を実行すると以下のように表示されます。
1 2 |
$collection:Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 11 [4] => 13 ) $mapcollect:Array ( [0] => 8 [1] => 10 [2] => 12 [4] => 18 [4] => 20 ) |
mapはこれまで紹介した関数とは違い、変更した値は別のcollectionとして生成されることになります。そのため別の変数を用意してmap関数処理をした後に、用意した変数に入れる必要があります。
collectionのデータを並び替える
collection内に配列として格納したデータは、sortを使えば並び替えることも可能です。
以下のようにsortを使えば、格納した要素を並び替えてくれます。
1 2 3 |
$collection = collect([13,5,11,3,1]); $sortnum = $collection -> sort(); print_r($sortnum -> values() -> all()); |
上記を実行すると以下のように表示されます。
1 |
Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 11 [4] => 13 ) |
要素の並べ替えは基本的の降順で行ってくれます。
これで順番がバラバラの配列を代入しても、sortでキレイに降順で並べ替えてくれます。
まとめ
今回はPHPフレームワークの1つLaravel内のcollectionをご紹介しました。
collection内に配列を入れることでcollectionの様々な機能を利用することができ、より便利になります。
PHPの配列だけでは機能が足らず困っていたなら、是非Laravelを導入しcollectionを使ってみてくださいね。