チュートリアル:Laravelコレクションの基本的な使い方

15384 ワード

投稿:https://learnku.com/laravel/t...

詳細:https://learnku.com/laravel/c...

LaravelコレクションはLaravelフレームワークで非常に有用なツールです.
Laravel集合はPHPの中の配列のようですが、もっと使いやすいです.
このチュートリアルでは、いくつかの集合で使用するときの実用的なテクニックを体験します.
コレクション(Collection)Illuminate\Support\Collectionクラスは、便利な操作配列を提供するパッケージである.
集合Collectionクラスは、PHPとLaravelの一部のインタフェースを実現し、例えば、
  • ArrayAccess-配列オブジェクトを操作するためのインタフェース.
  • IteratorAggregate-外部反復器のインタフェースを作成します.
  • JsonSerializable

  • ここでは、実装されている残りのインタフェースを表示できます.
    新しいコレクションを作成
    1つのセットは、collect()ヘルプ関数を使用して、1つの配列に基づいて作成されるか、またはIlluminate\Support\Collectionクラスを介して直接インスタンス化されることができる.collect()ヘルプ関数を非常に簡単に使用する例:
    $newCollection = collect([1, 2, 3, 4, 5]);

    より複雑な例:

    このヘルプ関数は、Illuminate\Support\Collectionクラスをインスタンス化する必要がないため、簡単に使用できます.dd()ヘルプ関数を使用して、ブラウザにコレクションを表示することもできます.多分そう見えます.
    Eloquent ORMコレクション
    Laravel Eloquent ORMも集合としてデータを返します.
    Eloquent ORMの呼び出しは、集合としてデータを返します.
    この効果を実証するために、Sqliteデータベースを初期化します.
    Laravelフレームワークの事前設定された移行ファイルを使用して、ユーザー・テーブルを作成し、10個のデータをユーザー・テーブルに入力します.
        /**
         *           
         */
        public function getUsers()
        {
            $users = User::all();
            dd($users);
        }

    コントローラメソッドは、次のように表示されるすべてのユーザのLaravelセットを返します.
    矢印記号を使用すると、集合プロパティに簡単にアクセスできます.例については、$usersのセットの最初のユーザの名前を取得するには、このようにすることができます.
        /**
         *            
         */
        public function firstUser()
        {
            $user = User::first();
            dd($user->name);
        }

    サンプルセットの作成
    私たちは最も役に立つ集合操作テクニックを使用します.あなたはきっと使いやすいと思います.
    次の章では、次のユーザー・テーブルのデータと、プレゼンテーションの目的を達成するためにカスタム・セットを使用します.ここでは手動で作成しますが、Laravelのモデルファクトリを使用して作成しても構いません.
    Array
    (
        [0] => Array
            (
                [id] => 1
                [name] => Chasity Tillman
                [email] => [email protected]
                [age] => 51
                [created_at] => 2016-06-07 15:50:50
                [updated_at] => 2016-06-07 15:50:50
            )
        ...
    )

    データの検索
    コレクション内でデータを検索する方法はいくつかあります.contains contains()メソッドは、単一の値、またはキー/値ペアのセット、またはコールバック関数を送信し、ターゲットコンテンツがセット内にあるかどうかを通知するためにブール値を返します.
        /**
         *     /                
         *
         *
         * @return true or false
         */
        public function contains()
        {
            $users = User::all();
            $users->contains('name', 'Chasity Tillman');
            //true
    
            $collection = collect(['name' => 'John', 'age' => 23]);
            $collection->contains('Jane');
            //false
    
            $collection = collect([1, 2, 3, 4, 5]);
            $collection->contains(function ($key, $value) {
                return $value <= 5;
                //true
            });
        }
    where
    キー値ペアの形式でwhereメソッドで集合を検索する.
    where()メソッドは、チェーンによって呼び出されてもよい.
         /**
         *    where          
         *
         *              
         */
        public function where()
        {
            $users = User::all();
            $user = $users->where('id', 2);
            //    id   2    
    
            $user = $users->where('id', 1)
                          ->where('age', '51')
                          ->where('name', 'Chasity Tillman');
    
            //    user     id   1,    51  ,   Chasity Tillman    
        }
    where-likeのような検索方法もありますが、私は一つ一つ挙げません.Laravelの公式ドキュメントで見ることができます.
    次のいくつかを重点的に見ることができます.
  • whereIn()-キー値ペアをパラメータとしてセットを取得します.値はグループ数でなければなりません.
  • search()-値を1つのセットで取得し、値がある場合はインデックスを返し、ない場合はfalseを返します.
  • has()-キー値ペアが存在するかどうかを確認し、ブール値を返します.

  • データのフィルタfilter()の方法で濾過したと推測したかもしれません.
    filterメソッドはパラメータとしてコールバック関数を受信し、コールバック関数で判断する論理を考えるかもしれませんよね?そう思ってるの?
         /**
         *    filter   ,         35    
         */
        public function filter()
        {
            $users = User::all();
            $youngsters = $users->filter(function ($value, $key) {
                return $value->age < 35;
            });
    
            $youngsters->all();
            //        35    
        }

    filterメソッドはパラメータとしてコールバック関数を受信し、コールバック関数のパラメータはキー値ペアであり、具体的なフィルタリングされた論理は関数に書き込まれ、条件に合致するすべての値が返されます.
    ここではall()メソッドも使用され、1つのセットのすべての値を返します.
    データのソート/ソート
    コレクションを使用すると、2つの簡単な方法でデータをソートできます.-
  • sortBy()-与えられたデータを昇順に並べ替える
  • .
  • sortyByDesc()-所与のデータ降順ソート
  • ソート・メソッドは、セットをソートするためのキーまたはコールバック関数パラメータを受け入れます.
        /**
         *                 
         *          。
         */
        public function sortData()
        {
            $users  = User::all();
    
            $youngestToOldest = $users->sortBy('age');
            $youngestToOldest->all();
            //            
    
            $movies = collect([
                [
                    'name' => 'Back To The Future',
                    'releases' => [1985, 1989, 1990]
                ],
                [
                    'name' => 'Fast and Furious',
                    'releases' => [2001, 2003, 2006, 2009, 2011, 2013, 2015, 2017]
                ],
                [
                    'name' => 'Speed',
                    'releases' => [1994]
                ]
            ]);
    
            $mostReleases = $movies->sortByDesc(function ($movie, $key) {
                return count($movie['releases']);
            });
    
            $mostReleases->toArray();
            //              
    
            dd($mostReleases->values()->toArray());
            /*
                                  
            */
        }

    ソート・メソッドは、各値のキーを維持します.これはアプリケーションにとって重要かもしれませんが、チェーンvalues()でデフォルトのゼロベースのインクリメンタル値にリセットできます.
    いつものように、集合を配列に変換する集合方法toArray()も使用します.
    データグループgroupBy
    コレクションをグループ化すると、データの理解に役立ちます.groupByメソッドは、キーまたはコールバック関数を受け入れ、キー値またはコールバック値に基づいてパケットセットを返します.
        /**
         * groupBy                
         *   
         */
        public function grouping()
        {
            $movies = collect([
                ['name' => 'Back To the Future', 'genre' => 'scifi', 'rating' => 8],
                ['name' => 'The Matrix',  'genre' => 'fantasy', 'rating' => 9],
                ['name' => 'The Croods',  'genre' => 'animation', 'rating' => 8],
                ['name' => 'Zootopia',  'genre' => 'animation', 'rating' => 4],
                ['name' => 'The Jungle Book',  'genre' => 'fantasy', 'rating' => 5],
            ]);
    
            $genre = $movies->groupBy('genre');
            /*
            [
                 "scifi" => [
                   ["name" => "Back To the Future", "genre" => "scifi", "rating" => 8,],
                 ],
                 "fantasy" => [
                   ["name" => "The Matrix", "genre" => "fantasy", "rating" => 9,],
                   ["name" => "The Jungle Book", "genre" => "fantasy", "rating" => 5, ],
                 ],
                 "animation" => [
                   ["name" => "The Croods", "genre" => "animation", "rating" => 8,],
                   ["name" => "Zootopia", "genre" => "animation", "rating" => 4, ],
                 ],
            ]
            */
    
            $rating = $movies->groupBy(function ($movie, $key) {
                return $movie['rating'];
            });
    
            /*
            [
               8 => [
                 ["name" => "Back To the Future", "genre" => "scifi", "rating" => 8,],
                 ["name" => "The Croods", "genre" => "animation", "rating" => 8,],
               ],
               9 => [
                 ["name" => "The Matrix", "genre" => "fantasy", "rating" => 9,],
               ],
               4 => [
                 ["name" => "Zootopia","genre" => "animation", "rating" => 4,],
               ],
               5 => [
                 ["name" => "The Jungle Book","genre" => "fantasy","rating" => 5,],
               ],
            ]
           */
        }

    データ・サブセットの取得
    データのセットを指定し、その一部を取得したい場合があります.これは次の可能性があります.
  • 前2条記録
  • 最後の2つの記録
  • 2 2グループを除くすべての記録.

  • 集合操作は、少量の方法でこれらの操作を完了するのに役立ちます.take
    takeメソッドは整数値を受け入れ、指定したアイテム数を返します.負の数が与えられ、 take()は、セットの最後の指定されたアイテム数を返します.
        /**
         * take          n    。
         *    -n ,     n    
         */
        public function takeMe()
        {
            $list = collect([
                'Albert', 'Ben', 'Charles', 'Dan', 'Eric', 'Xavier', 'Yuri', 'Zane'
            ]);
    
            //       
            $firstTwo = $list->take(2);
            //['Albert', 'Ben']
    
            //        
            $lastTwo = $list->take(-2);
            //['Yuri', 'Zane']
        }
    chunk
    chunkメソッドは,集合をnサイズの小さい集合に分割する.
        /**
         * Chunk(n)       n      ,         
         * 
         */
        public function chunkMe()
        {
            $list = collect([
                'Albert', 'Ben', 'Charles', 'Dan', 'Eric', 'Xavier', 'Yuri', 'Zane'
            ]);
    
            $chunks = $list->chunk(3);
            $chunks->toArray();
            /*
            [
                ["Albert", "Ben", "Charles",],
                [3 => "Dan", 4 => "Eric", 5 => "Xavier",],
                [6 => "Yuri", 7 => "Zane",],
            ]
            */
        }

    ここには効果を達成する方法がたくさんあります.
    bladeページにデータを渡すと、ブロックしてn行のデータを一度に取得できます.たとえば、3つの名前ごとに1行にロードします.
    @foreach($list->chunk(3) as $names)
        
    @foreach($names as $name) {{ $name }} @endforeach
    @endforeach
    collapse()メソッドを使用して、更新されたコレクショングループを大きなコレクションに変換して、chunkメソッドを反転することもできます.このhereを参照してください.
    データの遍歴map
    mapメソッドはコレクションを巡回し、各要素を閉パッケージ関数に転送します.この閉パッケージ関数の戻り値は元の要素値を置き換えます.
    名前からなる集合を作成しmapメソッドを使用して対応する名前の長さからなる集合を返します.
       /**
         * map function iterates a collection through a callback
         * function and performs an operation on each value.
         */
        public function mapMe()
        {
            $names = collect([
                'Albert', 'Ben', 'Charles', 'Dan', 'Eric', 'Xavier', 'Yuri', 'Zane'
            ]);
    
            $lengths = $names->map(function ($name, $key) {
                return strlen($name);
            });
    
            $lengths->toArray();
            //[6, 3, 7, 3, 4, 6, 4, 4,]
        }
    transform
    mapメソッドは新しいコレクションを作成しますが、元のコレクションの内容を変更したい場合があります.transformはコールバックメソッドを提供し,同じ集合を操作する.
    変換は新しいコレクションを生成しないので、新しい値に割り当てる必要はありません.
        /**
         * Transform        。
         */
        public function transformMe()
        {
            $names = collect([
                'Albert', 'Ben', 'Charles', 'Dan', 'Eric', 'Xavier', 'Yuri', 'Zane'
            ]);
    
            $names->transform(function ($name, $key) {
                return strlen($name);
            });
    
            $names->toArray();
            //[6, 3, 7, 3, 4, 6, 4, 4,]
        }
    reduce
    mapメソッドとtransformメソッドとは異なり、reduceメソッドは単一の値を返します.彼は反復のたびに結果を次の反復に伝えた.
    たとえば、1つのセット内のすべての整数の和を取得するために、reduceは後続の数値の合計を渡し、次の数値に結果を反復的に追加します.
        /**
         *              
         */
        public function reduceMe()
        {
            $numbers = collect([
                1, 2, 3, 4, 5, 6, 7, 8, 9, 10
            ]);
    
            $sum = $numbers->reduce(function ($sum, $number) {
                return $sum + $number;
            });
            //55
        }
    each
    eachメソッドは、コールバック関数によって各データ項目を伝達します.
    eachメソッドについて最も興味深い部分は、コールバック関数でfalseを返してループを飛び出すことです.
        /**
         *            
         *
         */
        public function eachMethod()
        {
            $numbers = collect([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
            $smallNumbers = $numbers->each(function ($num, $key) {
                if ($num > 5) {
                    return false;
                }
                echo $num .", ";
            });
            //1, 2, 3, 4, 5,
        }
    every
    everyメソッドは、セット内のn番目の要素ごとに構成される新しいセットを作成します.
    しゅうごう論
    Laravelは集合論のサポートを提供し,これは2つの異なる集合に対して交差,並列などの操作を取ることができることを意味する.union unionメソッドは、与えられた配列をセットに追加する.与えられた配列に元のセットと同じキーが含まれている場合、元のセットの値は変更されません.
        /**
         * add array values to a collection using union
         */
        public function union()
        {
            $coolPeople = collect([
                1 => 'John', 2 => 'James', 3 => 'Jack'
            ]);
    
            $allCoolPeople = $coolPeople->union([
                4 => 'Sarah', 1 => 'Susan', 5 =>'Seyi'
            ]);
            $allCoolPeople->all();
            /*
            [
                1 => "John", 2 => "James", 3 => "Jack", 4 => "Sarah", 5 => "Seyi",
           ]
           */
        }
    intersect
    intersect()メソッドは、入力パラメータに含まれていない要素を除去するパラメータとして配列または集合を受信します.
        /**
         * Return a list of very cool people in collection that
         * are in the given array
         */
        public function intersect()
        {
            $coolPeople = collect([
                1 => 'John', 2 => 'James', 3 => 'Jack'
            ]);
    
            $veryCoolPeople = $coolPeople->intersect(['Sarah', 'John', 'James']);
            $veryCoolPeople->toArray();
            //[1 => "John" 2 => "James"]
        }

    intersectメソッドの戻り値は既存のキーを保持することが分かった.
    結論
    私はあなたが自分で必要な集合方法を見つけることができることをカバーしようとしましたが、これはまだ学ぶ必要があります.
    最も注意すべきことは、私は以下の内容を残します.
  • sumおよびavgのような一般的な数学的方法.
  • は、splice、prepend、push、popなどの集合を更新する方法に関する.

  • LaravelドキュメントとLaravel APIドキュメントには、コレクションを操作するためのより多くの方法があります.
    このチュートリアルコードにフォローするには、gtihubウェアハウスhereを表示します.コードに勝手に貢献します.
    投稿:https://learnku.com/laravel/t...

    詳細:https://learnku.com/laravel/c...