検索
ホームページバックエンド開発PHPチュートリアルLaravel Collectionsクラスを使用したコードの書き方

Laravel Collectionsクラスを使用したコードの書き方

Jul 10, 2018 pm 02:02 PM
collectionlaravelphptutorialチュートリアル

この記事では主に、Laravel Collections クラスを使用したコードの書き方を紹介します。これには特定の参照値があります。今、共有します。必要な友人は参照してください。

Laravel は、いくつかの素晴らしいコンポーネントを提供します。私の意見では、これは現在のすべての Web フレームワークの中で最高のコンポーネント サポートを提供するフレームワークです。すぐに使えるビュー、認証、セッション、キャッシング、Eloquent、キュー、データ検証、その他のコンポーネントを提供するだけではありません。開発ツール (Valet および Homestead) も提供されています。

しかし、このフレームワークの最も強力な機能である Collection (コレクション) クラスは、初心者には無視されがちです。この記事では、コレクションを使用してコーディング効率を向上させ、コード行を読みやすくし、より無駄のないコードを作成する方法について説明します。

プレビュー

コレクションの使用について最初に知ったのは、開発者が Eloquent を使用してデータベース クエリを実行し、foreach ステートメントを使用して返されたデータからモデル コレクションを走査したことでした。

ただし、初心者は、コレクションが基礎となるデータを操作するための 90 以上のメソッドを提供していることに気づかないかもしれません。さらに優れているのは、ほとんどすべてのメソッドが操作の連鎖をサポートしているため、コードが散文のように読めることです。これにより、あなたと他のユーザーの両方にとって、コードが読みやすくなります。

まだ本題に到達していませんか?それでは、簡単なコード スニペットを確認し、コレクションを使用して太くて高速かつ強力なコードを作成する方法を見てみましょう。

コード例

現実の世界を構築しましょう。いくつかの API インターフェイスをクエリし、配列に保存された次の結果セットを取得するとします。

<?php // API 请求返回的结果
$data = [
    [&#39;first_name&#39; => 'John', 'last_name' => 'Doe', 'age' => 'twenties'],
    ['first_name' => 'Fred', 'last_name' => 'Ali', 'age' => 'thirties'],
    ['first_name' => 'Alex', 'last_name' => 'Cho', 'age' => 'thirties'],
];

配列には、名、姓、および年齢範囲が含まれていることがわかります。ここで、レコードから 30 歳 (30 代)age(age) ユーザーを取得し、姓(姓)に基づいて続行します#名前) ##ソート(並べ替え)。最後に、返される結果が 単一の文字列 であることを望み、各ユーザーが排他的な 改行を持てるようにします。最後に、返される結果が

であることを望みます。この要件を達成するのは難しくないようです。次に、PHP を使用してこの関数を実装する方法を見てみましょう。

// 依据姓氏排序
usort($data, function ($item1, $item2) {
    return $item1['last_name']  $item2['last_name'];
});

// 依据年龄范围分组
$new_data = [];

foreach ($data as $key => $item) {
    $new_data[$item['age']][$key] = $item;
}

ksort($new_data, SORT_NUMERIC);

// 从年龄为 30 岁组里获取用户全名
$result = array_map(function($item) {
    return $item['first_name'].' '.$item['last_name'];
}, $new_data['thirties']);

// 将数组转换为字符串并以行分隔符分隔
$final = implode("\n", $result);

// 译注:原文是 $final = implode($results, "\n"); implode函数接收两种顺序的参数,为了保持与文档一致所以我这边做了调整。
実装コードは 20 行を超えています。そしてとても品がない。コメントや改行関連のコードを削除すると、このコードが読みにくくなります。さらに、一時変数と、PHP に組み込まれている不親切な並べ替えメソッドも使用する必要があります。

ここで、Collection クラスがいかに簡単かを見てみましょう:

collection($data)->where('age', 'thirties')
                 ->sortBy('last_name')
                 ->map(function($item){
                    return $item['first_name'].' '.$item['last_name'];
                 })
                 ->implode("\n");
すごい!コードは 20 行から 6 行になりました。コードがよりスムーズに実行されるだけでなく、どのような問題に対処しているのかをコメントで知らせる必要もなくメソッドが実装されます。

しかし、コードが完璧な段階に達することを妨げる問題がまだ 1 つあります。それは、姓と名を比較するために使用される

map メソッドです。率直に言って、これは大したことではありませんが、マクロの概念を探求する動機となります。

コレクションの拡張

Collection クラスは、他の Laravel コンポーネントと同様にマクロをサポートしています。つまり、メソッドを追加して後で使用することができます。

ヒント: 新しいメソッドをどこでも利用できるようにするには、そのメソッドをサービス プロバイダーに追加する必要があります。この関数を実装するための MacroServiceProvider を任意に作成したいと思います。
配列によって提供される任意の数のフィールドを連結し、文字列の結果を返すメソッドを追加しましょう:

Collection::macro('toConcatenatedString', function ($fields = [], $separator = ' ') {
    return $this->map(function($item) use ($fields, $separator) {
        return implode($separator, array_map(function ($el) use ($item) {
                return $item[$el];
            }, $fields)
        );
    })->implode("\n");
});
このメソッドを追加すると、コードは基本的に完璧になります:

collect($data)->where('age', 'thirties')
              ->sortBy('last_name')
              ->toConcatenatedString(['first_name', 'last_name']);
コードは 20 行以上あった混沌とした 3 行に整理され、すっきりと整理され、誰でもすぐに理解できる明確な機能を備えています。

別の例

次に 2 番目の例を見てみましょう。ユーザーのリストがあると仮定して、ロールに基づいてユーザーをフィルターし、登録期間が 5 年の場合はさらにフィルターする必要があります。またはそれより古い、

が A ~ M の文字で始まる場合、最初のユーザーのみが取得されます。

データは次のようになります:

<?php // API 请求返回的结果
$users = [
    [&#39;name&#39; => 'John Doe', 'role' => 'vip', 'years' => 7],
    ['name' => 'Fred Ali', 'role' => 'vip', 'years' => 3],
    ['name' => 'Alex Cho', 'role' => 'user', 'years' => 9],
];
PHP 実装を使用している場合、コードは次のようになります:

$subset = [];
foreach ($users as $user) {
    if ($user['role'] === 'vip' && $user['years'] >= 5) {
        if (preg_match('/\s[A-Z]/', $user['name'])) {
            $subset[] = $user;
        }
    }
}
return reset($subset)
注: 2 番目の if ステートメントは最初のステートメント内に移動されますが、条件が 2 つを超えるとコードが読みにくくなると思うので、個人的には 1 つの if ステートメント内で使用する条件は 2 つまでにしたいと考えています。
このコードはそれほど悪くありませんが、それでも一時変数を使用する必要があり、

reset 関数を使用してポインターを最初のユーザーにリセットする必要もあります。私たちのコードには 4 レベルのインデントもあり、コードの解析がさらに難しくなります。

代わりに、コレクションがこの問題をどのように処理するかを見てみましょう:

collect($users)->where('role', 'vip')
              ->map(function($user) {
                  return preg_match('/\s[A-Z]/', $user['name']);
              })
              ->firstWhere('years', '>=', '5');

我们将代码简化到了之前的一般左右,每一步过滤处理清晰明了,并且我们不需要引入临时变量。

遗憾的是目前集合还不支持正则匹配,所以我们使用 map 方法,不过我们可以为这个功能创建一个宏:

Collection::macro('whereRegex', function($expression, $field) {
    return $this->map(function ($item) use ($expression, $field) {
        return preg_match($expression, $item[$field]);
    })
});

得益于宏方法,我们的代码现在看起来如下:

collect($users) -> where('role', 'vip')
                -> whereRegex('/\s[A-Z]/', 'name')
                -> firstWhere('years', '>=', 5);
注意:  为了简单起见,我们的红仅仅适用于数组集合。如果你计划让它们可以在 Eloquent 集合上使用,你需要在此场景下做相应的代码处理才行。

不同的视角

我们可以继续列出无数的示例,但仍然无法涵盖所有可用的集合方法,并且这从来都不是本文的真正目的。

需要注意的是,通过使用 Collection 类,您不仅可以获得一个方法库来简化编程工作,还可以选择一种从根本上改善代码的方法。

你会情不自禁的将你的代码结构从代码块重构简化成一行,同时减少代码的缩进,临时变量的使用和技巧性方法,另外你还可以使用链式编程方法,这让你的代码更加便于阅读和解析,此外最重要的是减少了编码工作!

查看官方文档获取更多这个迷人的类库的使用细节:https://laravel.com/docs/coll...

提示: 你还可以获取这个 Collection 类独立安装包,在使用非 laravel 项目是会非常有帮助。感谢 Tighten Co 团队做出的努力 https://github.com/tightenco/...。

感谢阅读,快乐编码!

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于Laravel的Eloquent ORM的解析

以上がLaravel Collectionsクラスを使用したコードの書き方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPの目的:動的なWebサイトの構築PHPの目的:動的なWebサイトの構築Apr 15, 2025 am 12:18 AM

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHP:データベースとサーバー側のロジックの処理PHP:データベースとサーバー側のロジックの処理Apr 15, 2025 am 12:15 AM

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO)PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO)Apr 15, 2025 am 12:15 AM

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。

PHPおよびPython:コードの例と比較PHPおよびPython:コードの例と比較Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

アクション中のPHP:実際の例とアプリケーションアクション中のPHP:実際の例とアプリケーションApr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHP:インタラクティブなWebコンテンツを簡単に作成しますPHP:インタラクティブなWebコンテンツを簡単に作成しますApr 14, 2025 am 12:15 AM

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPython:2つの一般的なプログラミング言語を比較しますPHPとPython:2つの一般的なプログラミング言語を比較しますApr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPの永続的な関連性:それはまだ生きていますか?PHPの永続的な関連性:それはまだ生きていますか?Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、