7
votes

What is a Laravel collection? what is a difference between a PHP array and a Laravel collection?

It seems collections are very similar to arrays. For example, result retrieved via the get() method is a collection of data. But when we want to use it as an array we must use toArray() method. Why?

4
@ZakariaAcharki such questions?? If we can't talk about programming terms then where should we ask it?Iman Sedighi
Where's your code and where are you struggling so we can helps!? if you want the definition of collections in laravel google is your friend or you could find it simply in StackOverflow Documentation or in Officiel Laravel Documentation.. why we should recopy that as answer (as you could see in the answer below) and what the plus that supposed this answer to give here!Zakaria Acharki
@ZakariaAcharki I did the google search first and read Laravel Documentation too but still didn't understand what the collection is. As I am asking about What is collection then there is no sample code! if the quality of the answer below is not good, is not my fault. I ask people like you to explain it wit more detail. If you know the answer then please reply.Iman Sedighi
@ImanSedighi There's plenty of sample code illustrating creation and functionality of collections in the docs.ceejayoz
This will help you get started with Laravel Collections codezen.io/most-useful-laravel-collection-methodsSapnesh Naik

4 Answers

21
votes

It is basically a API wrapper for PHP array functions. But it has much more features which benefit array processing.

1. Avoid braces hell

think this case with at 5 braces:

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

This is hell, if the array with more than 10 braces, you might lose track of the brace in the end. However, if you use Collection, it can be replaced with:

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

This is more readable, object-oriented and flow-thinking.

2. Unify the use of API

It is PHP original API issue that you never know where the array should in parameter. they just not consistent. for example:

    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 just provide consistent API make my life easier.

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

3.Collection API process key-value array better

Laravel focus on processing data from a database. So many cases are with key-value array situation, rather than an indexed array. So Laravel collection has many extended methods against the original PHP functions, which process with key of the array . For example:

 $array=[
        ["id"=>1,"name"=>"Apple"],
        ["id"=>2,"name"=>"Banana"],
        ["id"=>1,"name"=>"Apple"],
        ["id"=>2,"name"=>"Banana"],
    ];

    $result= collect($array)->unique("id");

The result will be:

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

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

)

4. Dealing with multi layer array

Most of PHP original array API only deal with the top layer of an array. if you want to process the deep layer of an array, the code might become much more complex. But many APIs of Laravel collection allow you to access the deep layer of the array.

For example:

 $array=[
        ["id"=>1,"product"=>['name'=>"Apple"]],
        ["id"=>2,"product"=>['name'=>"Watermelon"]],
        ["id"=>3,"product"=>['name'=>"Banana"]],

    ];

    $result= collect($array)->sortBy("product.name");

The result will be:

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. More missing array helpers from the original PHP

Besides above, Laravel collection increases many very useful array APIs in each new versions. Many useful Helpers were designed to process the Key-Value type of the array and so useful for developing the application. like: keyBy(), where(), isEmpty(), isNotEmpty() and so on.

Furthermore, Collection is macroable which means you can extend Collection API, make Collection much more suitable for your project.

All in all, The Laravel collection is powerful array processing Helper for my development.

6
votes

Collection is convenient wrapper for working with arrays of data. Collections have all conveniences of arrays and also bunch of their own helpers.

The Illuminate\Support\Collection class provides a fluent, convenient wrapper for working with arrays of data. As you can see, the Collection class allows you to chain its methods to perform fluent mapping and reducing of the underlying array. In general, collections are immutable, meaning every Collection method returns an entirely new Collection instance.

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

2
votes

Think of a Collection as an array on steroids. It is an object that works the same as an array - that is, you can get items with $collection['item'] and set them with $collection['foo'] = 'bar' - but it comes with additional methods for higher-level functions that make common operations easier. These methods are often an alternative for using foreach and manually manipulating arrays. Adam Wathan has some good practical examples of the benefits you might get from using collections instead of arrays. There are also good introductions elsewhere online.

0
votes

Laravel Collections


Laravel Collections, what makes them useful?


    1. Simplifies developer lives when working with a "Collection" of items
    1. Non-opinionated to the items that are in the collection
    • Arrays, Objects, Primitive (strings, bools, numbers), or a combination - Collections don't care.
    1. 121 Methods available Collection Methods
    1. Fluent Api: Laravel Collection Methods Can be chained together
    1. Extendable: You can extend Laravel Collections with custom functions using the macro function.
    1. Useful Externally from Laravel: Supported by Laravel's core team, Collections are one of Laravel's Illuminate Components. Illuminate is supported by Laravel's core team, but are considered "Components". Components are modularized and encapsulated, meaning you can easily use Laravel Collection outside of the Laravel Framework using composer to install Illuminate\Support

Laravel Collections In Action


60+ Laravel Collection Methods in (Almost) 15 Minutes