Perl日記

PerlとかRubyとかPHPとかPythonとか

Laravel5.1入門その6 collectヘルパを使う

laravel.com


collect([])を使うと、Illuminate\Support\Collectionインスタンスが返ってきて、PHPの貧弱なArrayを便利にしてくれる。

Eloquentを使うときも、これらの便利メソッドが使える。

<?php

// 大体のやつはall()をつけないとまだIlluminate\Support\Collectionインスタンスなのでチェーンできる


$c = collect([123, 234, 345]);

$c->first(); //=> 123
$c->end(); //=> 345

$c->contains(345); //=> true
$c->contains(456); //=> false

$c->each(function($item, $key){
  echo $item;
});

$c->filter(function($item){
  return $item % 2 === 0;
})->all();

//=> [1 => 234]

// キーをリセットしたいときはvalues()を挟む

$c->filter(function($item){
  return $item % 2 === 0;
})->values()->all();

//=> [234]


$c->map(function($item, $key){
  return $item * 2;
})->all();

//=> [246, 468, 690]

$h = collect(['name' => 'Yamada']);
$h->get('name'); // Yamada
$h->get('age', 30); // 30
$h->get('gender'); // null

$p = collect([
  ['city' => 'Tokyo'],
  ['city' => 'Osaka'],
]);

$p->keyBy('city')->all();

//=> ["Tokyo" => ["city" => "Tokyo"], "Osaka" => ["city" => "Osaka"]]


$p->pluck('city')->all();

//=> ["Tokyo", "Osaka"]

$p->sortBy('city');

$p->where('city', 'Tokyo')->all();

//=> [["city" => "Tokyo"]]

未だに配列の最後の値をとりたいときにどうするか悩むので(そしてググって絶望する)、
最初のfirst()とend()が使えるだけで涙が出る。