集計
コレクションの要素の個数、合計値、平均などを求めるメソッドが準備されている。これらのメソッドは、コレクションの要素に基づいた処理結果を1つの数値として返す。
クエリービルダーのメソッドでも書いたが、データベースに対するクエリーに関するメソッドというよりも、Collection
の要素を集計するメソッドととらえた方がよい。
以下の2つのコレクション$c
と$p
で確認する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
>>> $c = collect([1,2,3,4,5]) => Illuminate\Support\Collection {#4332 all: [ 1, 2, 3, 4, 5, ], } >>> $p => Illuminate\Support\Collection {#4355 all: [ [ "name" => "Egawa", "gender" => "male", "height" => 175, ], [ "name" => "Iwata", "gender" => "female", "height" => 163, ], [ "name" => "Okada", "gender" => "male", "height" => 168, ], [ "name" => "Ando", "gender" => "male", "height" => 182, ], [ "name" => "Ueda", "gender" => "female", "height" => 167, ], ], } |
count()~要素数
コレクションの要素の数を返す。引数を指定しても無視される。
|
>>> $c->count() => 2 >>> $p->count() => 5 >>> $p->count('foo') => 5 |
max()/min()~最大値・最小値
コレクションの要素の最大値/最小値を返す。
|
>>> $c->max() => 5 >>> $c->min() => 1 |
連想配列を要素とする配列の場合は、キーを指定してその値の最小値/最大値を取得できる。値が文字列を含む場合、辞書順での最小値/最大値となる。
|
>>> $p->min('height') => 163 >>> $p->max('name') => "Ueda" |
連想配列で引数を指定しないと、最初のキー列の値で判定され、その値を持つ要素が連想配列として返される。
|
>>> $p->min() => [ "name" => "Ando", "gender" => "male", "height" => 182, ] >>> $p->max() => [ "name" => "Ueda", "gender" => "female", "height" => 167, ] |
sum()/average()/avg()~合計値・平均値
コレクションの要素の合計値/平均値を返す。
|
>>> $c->sum() => 15 >>> $c->average() => 3 >>> $c->avg() => 3 |
連想配列の場合は、集計するキー列を指定する。引数を指定しないとエラー、文字列を値に含むキーを指定すると警告が出て結果は0になる。
|
>>> $p->sum('height') => 855 >>> $p->average('height') => 171 |
並べ替え
コレクションの要素を並べ替え、結果のコレクションを返す。元のコレクションは影響を受けない。
reverse()~逆順に並べる
reverse()
メソッドは、元のコレクションの要素を逆順にしたコレクションを返す。引数を指定しても無視される。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
>>> $c->reverse() => Illuminate\Support\Collection {#4372 all: [ 4 => 5, 3 => 4, 2 => 3, 1 => 2, 0 => 1, ], } >>> $p->reverse() => Illuminate\Support\Collection {#4371 all: [ 4 => [ "name" => "Ueda", "gender" => "female", "height" => 167, ], 3 => [ "name" => "Ando", "gender" => "male", "height" => 182, ], 2 => [ "name" => "Okada", "gender" => "male", "height" => 168, ], 1 => [ "name" => "Iwata", "gender" => "female", "height" => 163, ], 0 => [ "name" => "Egawa", "gender" => "male", "height" => 175, ], ], } |
shuffle()~シャッフル
shuffle()
メソッドは、元のコレクションの要素の値をシャッフルしたコレクションを返す。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
>>> $c->shuffle() => Illuminate\Support\Collection {#4367 all: [ 1, 3, 4, 5, 2, ], } >>> $p->shuffle() => Illuminate\Support\Collection {#4376 all: [ [ "name" => "Ando", "gender" => "male", "height" => 182, ], [ "name" => "Ueda", "gender" => "female", "height" => 167, ], [ "name" => "Egawa", "gender" => "male", "height" => 175, ], [ "name" => "Okada", "gender" => "male", "height" => 168, ], [ "name" => "Iwata", "gender" => "female", "height" => 163, ], ], } |
sort()~昇順ソート
sort()
メソッドは元のコレクションの値の昇順で要素を並べ替える。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
>>> $c => Illuminate\Support\Collection {#4369 all: [ 2, 3, 5, 4, 1, ], } >>> $c->sort() => Illuminate\Support\Collection {#4373 all: [ 4 => 1, 0 => 2, 1 => 3, 3 => 4, 2 => 5, ], } |
連想配列型でも使えるが、引数を指定するとエラーになる。引数なしで呼ぶと、1つ目のキー列の内容でソートされる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
>>> $p->sort() => Illuminate\Support\Collection {#4358 all: [ 3 => [ "name" => "Ando", "gender" => "male", "height" => 182, ], 0 => [ "name" => "Egawa", "gender" => "male", "height" => 175, ], 1 => [ "name" => "Iwata", "gender" => "female", "height" => 163, ], 2 => [ "name" => "Okada", "gender" => "male", "height" => 168, ], 4 => [ "name" => "Ueda", "gender" => "female", "height" => 167, ], ], } |
sortBy()~引数キーの昇順
sortBy()
メソッドは引数にキーを指定して、そのキーの値の昇順で要素を並べ替えたコレクションを返す。
以下の例ではname
を指定して名前の昇順で並べ替えている。文字列は辞書順でソートされる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
>>> $p->sortBy('name') => Illuminate\Support\Collection {#4372 all: [ 3 => [ "name" => "Ando", "gender" => "male", "height" => 182, ], 0 => [ "name" => "Egawa", "gender" => "male", "height" => 175, ], 1 => [ "name" => "Iwata", "gender" => "female", "height" => 163, ], 2 => [ "name" => "Okada", "gender" => "male", "height" => 168, ], 4 => [ "name" => "Ueda", "gender" => "female", "height" => 167, ], ], } |
以下の例ではheight
を指定して並べ替えている。身長の数値が昇順となるように並んでいる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
>>> $p->sortBy('height') => Illuminate\Support\Collection {#4369 all: [ 1 => [ "name" => "Iwata", "gender" => "female", "height" => 163., ], 4 => [ "name" => "Ueda", "gender" => "female", "height" => 167., ], 2 => [ "name" => "Okada", "gender" => "male", "height" => 168., ], 0 => [ "name" => "Egawa", "gender" => "male", "height" => 175., ], 3 => [ "name" => "Ando", "gender" => "male", "height" => 182., ], ], } |
sortByDesc()~引数キーの降順
sortByDesc()
メソッドは引数にキーを指定して、そのキーの値の降順で要素を並べ替えたコレクションを返す。
以下の例では、身長の高い順に並べ替えている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
>>> $p->sortByDesc('height') => Illuminate\Support\Collection {#4382 all: [ 3 => [ "name" => "Ando", "gender" => "male", "height" => 182., ], 0 => [ "name" => "Egawa", "gender" => "male", "height" => 175., ], 2 => [ "name" => "Okada", "gender" => "male", "height" => 168., ], 4 => [ "name" => "Ueda", "gender" => "female", "height" => 167., ], 1 => [ "name" => "Iwata", "gender" => "female", "height" => 163., ], ], } |
コレクションの変形・取出し
pluck()~キー列の取出し
pluck()
メソッドは引数にキーを指定し、そのキーの値を単純配列のコレクションとして取り出す。pluckは英語で「摘む」という意味。
|
>>> $p->pluck('name') => Illuminate\Support\Collection {#4377 all: [ "Egawa", "Iwata", "Okada", "Ando", "Ueda", ], } |
以下はgender
キーの値を取り出している例。
|
>>> $p->pluck('gender') => Illuminate\Support\Collection {#4380 all: [ "male", "female", "male", "male", "female", ], } |
flatten()~コレクションの展開
flatten()
メソッドは、多次元配列型のコレクションの要素を再帰的にたどって1次元の配列型に並べる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
>>> $c = collect([1, [2, 3], [[4, 5], 6]]) => Illuminate\Support\Collection {#4333 all: [ 1, [ 2, 3, ], [ [ 4, 5, ], 6, ], ], } >>> $c->flatten() => Illuminate\Support\Collection {#4311 all: [ 1, 2, 3, 4, 5, 6, ], } |
連想配列はキーが無視され、値が使われる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
>>> $p->flatten() => Illuminate\Support\Collection {#4373 all: [ "Egawa", "male", 175, "Iwata", "female", 163, "Okada", "male", 168, "Ando", "male", 182, "Ueda", "female", 167, ], } |
多次元配列の場合、再帰的に要素をたどって1次元化する。
SQL的処理
クエリービルダーメソッドと同等のwhere()
、groupBy()
がある。ただしこれらのメソッドは、クエリービルダーの様にはクエリーを生成はしない。
where()~条件による抽出
where()
メソッドはクエリービルダーメソッドのwhere()
と同じ。
|
>>> $p->where('gender', '=', 'female') => Illuminate\Support\Collection {#4356 all: [ 1 => [ "name" => "Iwata", "gender" => "female", "height" => 163, ], 4 => [ "name" => "Ueda", "gender" => "female", "height" => 167, ], ], } |
groupBy()~キーによるグルーピング
groupBy()
メソッドは、指定したキー列の値で要素をグルーピングする。
- 元の配列の要素として、指定したキー列の値をキーとした配列ができる
- その配列の要素として、各キーに対応した値を持つ元の要素が格納される
以下の例ではgender
キーによってグルーピングしている。gender
キーの値male
、female
をキーとする配列が作られ、キーがmale
の配列にはgender
がmale
の要素、キーがfemale
の配列にはgender
がfemale
の要素が格納されている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
>>> $g = $p->groupBy('gender') => Illuminate\Support\Collection {#4373 all: [ "male" => Illuminate\Support\Collection {#4370 all: [ [ "name" => "Egawa", "gender" => "male", "height" => 175, ], [ "name" => "Okada", "gender" => "male", "height" => 168, ], [ "name" => "Ando", "gender" => "male", "height" => 182, ], ], }, "female" => Illuminate\Support\Collection {#4372 all: [ [ "name" => "Iwata", "gender" => "female", "height" => 163, ], [ "name" => "Ueda", "gender" => "female", "height" => 167, ], ], }, ], } |