【问题标题】:What is a Laravel collection?什么是 Laravel 集合?
【发布时间】:2023-04-02 20:22:01
【问题描述】:

什么是 Laravel 集合? PHP 数组和 Laravel 集合有什么区别?

似乎集合与数组非常相似。例如,通过get() 方法检索的结果是数据的集合。但是当我们想将它用作数组时,我们必须使用toArray() 方法。为什么?

【问题讨论】:

  • @ZakariaAcharki 这样的问题??如果我们不能谈论编程术语,那么我们应该在哪里问呢?
  • 您的代码在哪里,您在哪里苦苦挣扎,所以我们可以提供帮助!?如果你想在 laravel 中定义集合,谷歌是你的朋友,或者你可以简单地在 StackOverflow DocumentationOfficiel Laravel Documentation 中找到它。为什么我们应该将其复制为答案(正如您在下面的答案中看到的那样)以及假设这个答案在这里给出的加号!
  • @ZakariaAcharki 我先进行了谷歌搜索并阅读了 Laravel 文档,但仍然不明白集合是什么。当我问什么是集合时,没有示例代码!如果下面的答案质量不好,那不是我的错。我请像你这样的人更详细地解释它。如果您知道答案,请回复。
  • @ImanSedighi 文档中有大量示例代码说明了集合的创建和功能。
  • 这将帮助你开始使用 Laravel Collections codezen.io/most-useful-laravel-collection-methods

标签: php laravel


【解决方案1】:

Laravel 集合


Laravel 集合,是什么让它们有用?


    1. 在使用“集合”项目时简化开发人员的生活
    1. 对收藏中的项目无意见
    • 数组、对象、基元(字符串、布尔值、数字)或组合 - 不关心集合。
    1. 121 种方法 available Collection Methods
    1. Fluent Api: Laravel Collection 方法可以链接在一起
    1. 可扩展:您可以使用 macro function. 使用自定义函数扩展 Laravel 集合
    1. 对 Laravel 的外部有用:在 Laravel 核心团队的支持下,Collections 是 Laravel 的Illuminate Components 之一。 Illuminate 得到 Laravel 核心团队的支持,但被视为“组件”。组件是模块化和封装的,这意味着您可以在 Laravel 框架之外使用 composer 轻松使用 Laravel Collection 安装Illuminate\Support

Laravel 集合在行动


60+ Laravel Collection Methods in (Almost) 15 Minutes

【讨论】:

    【解决方案2】:

    它基本上是 PHP 数组函数的 API 包装器。但它还有更多有利于数组处理的功能。

    1.避免大括号地狱

    用 5 个大括号来考虑这个案例:

     shuffle(shuffle(arsort(array_unique(array_merge($array1,$array2)))));
    

    这是地狱,如果数组有超过 10 个大括号,你最终可能会丢失大括号。但是,如果你使用 Collection,它可以替换为:

    collect($array1)
         ->merge($array2)
         ->unique()
         ->sort()
         ->shuffle()
         ->shuffle()
    

    这更具可读性、面向对象和流动思维。

    2。统一API的使用

    这是 PHP 原始 API 问题,您永远不知道数组应该在参数中的位置。他们只是不一致。例如:

        array_walk ( $array , $callback );
        array_map ( $callback , $array);
        array_merge ( $array1 ,$array2 );// return a new array
        array_push ($array1 ,$value); // not return a new array
    

    Laravel Collect 只是提供一致的 API 让我的生活更轻松。

        collect($array)
             ->each($callback)
             ->map($callback)
             ->merge($array2)
             ->push($value)
    

    3.Collection API 处理键值数组更好

    Laravel 专注于处理来自数据库的数据。所以很多情况都是键值数组的情况,而不是索引数组。所以 Laravel 集合有很多针对原始 PHP 函数的扩展方法,这些方法使用数组的 key 进行处理。例如:

     $array=[
            ["id"=>1,"name"=>"Apple"],
            ["id"=>2,"name"=>"Banana"],
            ["id"=>1,"name"=>"Apple"],
            ["id"=>2,"name"=>"Banana"],
        ];
    
        $result= collect($array)->unique("id");
    

    结果将是:

     Array
    (
        [0] => Array
            (
                [id] => 1
                [name] => Apple
            )
    
        [1] => Array
            (
                [id] => 2
                [name] => Banana
            )
    
    )
    

    4.处理多层数组

    大部分 PHP 原始数组 API 只处理数组的顶层。如果要处理数组的深层,代码可能会变得复杂得多。但是 Laravel 集合的很多 API 允许你访问数组的深层。

    例如:

     $array=[
            ["id"=>1,"product"=>['name'=>"Apple"]],
            ["id"=>2,"product"=>['name'=>"Watermelon"]],
            ["id"=>3,"product"=>['name'=>"Banana"]],
    
        ];
    
        $result= collect($array)->sortBy("product.name");
    

    结果将是:

    Array
    (
        [0] => Array
            (
                [id] => 1
                [product] => Array
                    (
                        [name] => Apple
                    )
    
            )
    
        [2] => Array
            (
                [id] => 3
                [product] => Array
                    (
                        [name] => Banana
                    )
    
            )
    
        [1] => Array
            (
                [id] => 2
                [product] => Array
                    (
                        [name] => Watermelon
                    )
    
            )
    
    )
    

    5.原始 PHP 中更多缺少的数组助手

    除此之外,Laravel 集合在每个新版本中都增加了许多非常有用的数组 API。许多有用的 Helper 旨在处理数组的键值类型,因此对于开发应用程序非常有用。比如:keyBy()where()isEmpty()isNotEmpty()等等。

    此外,Collection 是可宏的,这意味着您可以扩展 Collection API,使 Collection 更适合您的项目。

    总而言之,Laravel 集合是我开发的强大的数组处理助手。

    【讨论】:

      【解决方案3】:

      将 Collection 想象成 steroids 上的数组。它是一个与数组工作方式相同的对象——也就是说,您可以使用$collection['item'] 获取项目并使用$collection['foo'] = 'bar' 设置它们——但它带有用于更高级函数的附加方法,使常见操作更容易。这些方法通常是使用foreach 和手动操作数组的替代方法。 Adam Wathan 有一些很好的practical examples 可以从使用集合而不是数组中获得的好处。网上其他地方也有good introductions

      【讨论】:

        【解决方案4】:

        Collection 是处理数据数组的便捷包装器。集合具有数组的所有便利性以及它们自己的helpers

        Illuminate\Support\Collection 类为处理数据数组提供了一个流畅、方便的包装器。如您所见,Collection 类允许您链接其方法以执行流畅的映射和减少底层数组。一般来说,集合是不可变的,这意味着每个 Collection 方法都会返回一个全新的 Collection 实例。

        https://laravel.com/docs/5.3/collections

        【讨论】:

        • 我读过这个,但不明白。什么是方便的包装器?
        • @ImanSedighi 这是一个围绕 PHP 的默认数组“包装”的类,用于添加额外的函数/功能。
        • @ceejayoz 谢谢。如果它是一个类,那么我们可以说我们从 get() 方法获得的 Collections 结果是一种对象吗?
        • @ImanSedighi 集合是实现 PHP 的 ArrayAccess 接口的对象,因此可以像数组一样使用。
        • @ceejayoz 谢谢。您的评论比答案好得多。这就是为什么收集的结果与数组非常相似的原因
        猜你喜欢
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多