2017-01-04 4 views
3

Что такое коллекция Laravel? в чем разница между массивом PHP и коллекцией Laravel?Что такое коллекция Laravel?

Кажется, что коллекции очень похожи на массивы. Например, результат, полученный с помощью метода get(), представляет собой набор данных. Но когда мы хотим использовать его как массив, мы должны использовать метод toArray(). Зачем?

+0

@ZakariaAcharki такие вопросы ?? Если мы не можем говорить о терминах программирования, то где мы должны его спрашивать? –

+0

Где ваш код и где вы боретесь, поэтому мы можем помочь !? если вы хотите, чтобы определение коллекций в laravel было вашим другом, или вы могли бы найти его просто в ** [Документация StackOverflow] (http://stackoverflow.com/documentation/laravel/2358/collections#t=201701041507132004739) ** или в ** [Официальная документация Laravel] (https://laravel.com/docs/5.1/eloquent-collections) ** .. почему мы должны пересмотреть это как ответ (как вы могли видеть в ответе ниже) и что плюс который предположил, что этот ответ дать здесь! –

+0

@ZakariaAcharki Сначала я искал Google и читал Laravel Documentation, но все еще не понимал, что такое коллекция. Поскольку я спрашиваю о том, что такое коллекция, тогда нет образца кода! если качество ответа ниже не хорошо, это не моя вина. Я прошу таких людей, как вы, объяснить это более подробно. Если вы знаете ответ, тогда ответьте. –

ответ

1

Это, в основном, оболочка API для функций массива PHP. Но он имеет гораздо больше функций, которые приносят пользу обработке массива.

1. Избегайте брекет HELL

думает, что это дело с в 5 фигурных скобках:

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

Это ад, если массив с более чем 10 скобок, вы можете потерять след скобки в конце. Однако, если вы используете коллекцию, он может быть заменен:

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, которые обрабатываются с помощью ключа массива. Например:

$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 исходного массива имеет дело только с верхним слоем из массива , если вы хотите обработать глубокий слой массива, код может стать намного сложнее. Но многие API-интерфейсы коллекции Laravel позволяют вам получить доступ к глубокому слою массива.

Например:

$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-интерфейсов в каждой новой версии. Многие полезные помощники были разработаны для обработки типа «ключ-значение» массива и так полезны для разработки приложения. например: keyBy(), where(), isEmpty(), isNotEmpty() и так далее.

Кроме того, коллекция является макросъемкой, что означает, что вы можете расширить API Collection, сделать коллекцию более подходящей для вашего проекта.

В целом, коллекция Laravel - это мощная обработка массивов Помощник для моего развития.

4

Коллекция удобная упаковка для работы с массивами данных. В коллекциях есть все удобства массивов, а также их собственные helpers.

Класс Illuminate \ Support \ Collection обеспечивает плавную, удобную оболочку для работы с массивами данных. Как вы можете видеть, класс Collection позволяет вам объединять свои методы для плавного отображения и уменьшения базового массива. В общем, коллекции неизменяемы, то есть каждый метод Collection возвращает совершенно новый экземпляр Collection.

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

+0

Я прочитал это, но не понял. Что такое удобная обертка? –

+1

@ImanSedighi Это класс, «обернутый» вокруг массивов по умолчанию PHP, чтобы добавить дополнительные функции/возможности. – ceejayoz

+0

@ceejayoz Спасибо. если это класс, то можем ли мы сказать, что результаты Коллекций, полученные из метода get(), являются своего рода объектом? –

1

Think из коллекции в виде массива на стероидах. Это объект, который работает так же, как массив, то есть вы можете получить элементы с $collection['item'] и установить их с помощью $collection['foo'] = 'bar' - но он поставляется с дополнительными методами для функций более высокого уровня, которые упрощают общие операции. Эти методы часто являются альтернативой использованию foreach и ручным манипулированием массивами. У Адама Уэтана есть хорошие practical examples преимущества, которые вы могли бы получить от использования коллекций вместо массивов. Также есть good introductions.

Смежные вопросы