【Laravel】超便利!よく使うコレクション操作15選

【Laravel】超便利!よく使うコレクション操作15選

目次

配列やコレクションなどの集合体から、特定の条件でデータを抽出したり、中身を別の型のコレクションに移し替えたり、合計値を求める時など、コレクションに対する操作を for 構文などの繰り返しを使わない形で値の集合を操作する事が出来ます。

今回はその中でもよく利用する機能を一覧に纏めました。

よく使う コレクション操作の一覧

使用するサンプルデータ

$userList = collect([
  ["id"=>1, "team"=>"teamA", "score"=>30],
  ["id"=>2, "team"=>"teamB", "score"=>50],
  ["id"=>3, "team"=>"teamA", "score"=>10],
  ["id"=>4, "team"=>"teamB", "score"=>40]
]);

each

each は、要素を1つずつ取り出し何らかの処理をするメソッドです。

$userList->each(function($e) {
  Log::debug(print_r($e));
});

// user1 user2 user3 user4

filter

filter は、引数で指定した条件に一致する要素を抽出するメソッドです。

$userList = $userList->filter(function($e) {
  return "teamB" === $e["team"];
})->values();
Log::debug(print_r($userList));

// user2 user4

map

map は、リスト の要素を別の型に変換するメソッドです。

$userIdList = $userList->map(function($e) {
  return $e["id"];
})->toArray();
Log::debug(print_r($userIdList));

// 1 2 3 4

flatMap

flatMapは、mapと同じく リスト の要素を別の型に変換するメソッドです。map が1対1で要素の型を変換するのに対し、flatMap は1対多で変換をします。

つまり、入力した要素の中にある配列をフラットにして新しい配列を作成するときなどに flatMap を使用します。

$userList = collect([
  ["id"=>1, 'favorite' => ['java', 'php']],
  ["id"=>2, 'favorite' => ['javascript', 'ruby']],
  ["id"=>3, 'favorite' => ['python', 'java']],
  ["id"=>4, 'favorite' => ['javascript', 'typescript']]
]);

$userIdList = $userList->flatMap(function($e) {
    return $e['favorite'];
})->toArray();
Log::debug(print_r($userIdList));

// ["java", "php", "javascript", "ruby", "python", "java", "javascript", "typescript"]

unique

unique は、リスト の要素の中で、値もしくわ指定したキーが重複している要素を取り除くメソッドです。

$userList = $userList->map(function($e) {
  return $e["team"];
})->unique()->toArray();
Log::debug(print_r($userList));

// teamA teamB

sortBy

sortByは、リスト の要素を並び替えるメソッドです。

$userList = $userList->sortBy("score")->toArray();
Log::debug(print_r($userList));

// user2 user4 user1 user3

slice

sliceは、リスト の先頭から指定した位置までを取り出すメソッドです。

$userList = $userList->slice(0, 3)->toArray();
Log::debug(print_r($userList));

// user1 user2 user3

splice

spliceは、リスト の指定した位置から最後までを取り出すメソッドです。

$userList = $userList->splice(1)->toArray();
Log::debug(print_r($userList));

// user2 user3 user4

mapWithKeys

mapWithKeysは、リストを Map クラスに変換します。

$userMap = $userList->mapWithKeys(function($e) {
  return [$e['id'] => $e];
})->toArray();
Log::debug(print_r($userMap));

// {1=user1 , 2=user2 , 3=user3 , 4=user4 }

groupBy

groupByは、リストを グループごとに分別します。

$userMap = $userList->groupBy("team")->toArray();
Log::debug(print_r($userMap));

// {teamA=[user1 , user3 ], teamB=[user2 , user4 ]}

count

count は、リスト の件数を取得するメソッドです。

$value = $userList->count();
Log::debug(print_r($value));

// 4

max / min

max / min は、リスト の最大値 / 最小値 を取得するメソッドです。

$value = $userList->max("score");
Log::debug(print_r($value));

// 50

$value = $userList->min("score");
Log::debug(print_r($value));

// 10

sum

sum は、リスト の合計値を取得するメソッドです。

$value = $userList->sum("score");
Log::debug(print_r($value));

// 130

average

average は、リスト の平均値を取得するメソッドです。

$value = $userList->average("score");
Log::debug(print_r($value));

// 32.5

コメントを残す

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。