1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Laravel】Collection の Higher-order Messaging を使いこなす:ループレスで読みやすいデータ操作入門

Posted at

⚠️: 海外の記事をchatGPTで要約しただけのもの、主に自分用

概要

Laravel のコレクションにおける Higher-order messaging(高階メッセージング) とは、明示的なループやコールバックを使わずに、各要素のメソッドを呼び出したり、プロパティにアクセスできる仕組み です。

これにより、コードがシンプルで読みやすくなります。例えば、mapfiltereachsumsortBy などのメソッドで使用でき、直感的かつ効率的なデータ操作が可能になります。

サンプル

<?php

use Illuminate\Support\Collection;

$users = collect([
    (object) ['name' => 'Alice', 'age' => 25, 'votes' => 5, 'active' => true],
    (object) ['name' => 'Bob', 'age' => 30, 'votes' => 10, 'active' => false],
    (object) ['name' => 'Charlie', 'age' => 35, 'votes' => 15, 'active' => true],
]);

// 指定したプロパティの平均値を取得
$users->average->age; // 出力: 30
$users->avg->votes;   // 出力: 10

// 条件を満たす要素が存在するかチェック
$users->contains->name === 'Alice'; // 出力: true

// コレクション内の各要素にメソッドを実行
$users->each->activate(); // 直接の出力なし (各ユーザーを有効化)

// すべての要素が条件を満たすかチェック
$users->every->active; // 出力: false

// 指定したプロパティの条件を満たす要素のみを抽出
$users->filter->active; // 出力: [Alice, Charlie]

// 条件を満たす最初の要素を取得
$users->first->active; // 出力: Alice

// ネストした配列を平坦化して単一のコレクションにする
$nested = collect([
    (object) ['tags' => ['php', 'laravel']],
    (object) ['tags' => ['javascript', 'vue']]
]);
$nested->flatMap->tags; // 出力: ['php', 'laravel', 'javascript', 'vue']

// 指定したプロパティごとにグループ化
$users->groupBy->active; // 出力: [true => [Alice, Charlie], false => [Bob]]

// 指定したプロパティをキーとして連想配列を作成
$users->keyBy->name; // 出力: ['Alice' => Alice, 'Bob' => Bob, 'Charlie' => Charlie]

// コレクション内の各要素を変換して新しいコレクションを作成
$users->map->name; // 出力: ['Alice', 'Bob', 'Charlie']

// 指定したプロパティの最大値を取得
$users->max->age; // 出力: 35

// 指定したプロパティの最小値を取得
$users->min->age; // 出力: 25

// 条件に基づいてコレクションを二分割
$users->partition->active; // 出力: [active => [Alice, Charlie], inactive => [Bob]]

// 条件に一致する要素を削除
$users->reject->active; // 出力: [Bob]

// 条件を満たすまでの要素をスキップ
$users->skipUntil->active; // 出力: [Bob]

// 条件を満たしている間はスキップ
$users->skipWhile->active; // 出力: [Bob]

// 少なくとも1つの要素が条件を満たすかチェック
$users->some->active; // 出力: true

// 指定したプロパティで昇順ソート
$users->sortBy->age; // 出力: [Alice, Bob, Charlie]

// 指定したプロパティで降順ソート
$users->sortByDesc->age; // 出力: [Charlie, Bob, Alice]

// 指定したプロパティの合計値を取得
$users->sum->votes; // 出力: 30

// 条件を満たすまで要素を取得
$users->takeUntil->active; // 出力: [Bob]

// 条件を満たしている間の要素を取得
$users->takeWhile->active; // 出力: [Alice]

// 指定したプロパティの重複を排除
$users->unique->age; // 出力: [25, 30, 35]

元記事

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?