versammeln


集合

Die Klasse

Einführung

IlluminateSupportCollection bietet eine besser lesbare und einfacher zu handhabende Kapselung von Array-Daten. Spezifische Beispiele finden Sie im folgenden Code. Wir verwenden die Hilfsfunktion collect, um eine neue Sammlungsinstanz aus dem Array zu erstellen, führen die Funktion strtoupper für jedes Element aus und löschen dann alle leeren Elemente:

$collection = collect(['taylor', 'abigail', null])->map(function ($name) { 
   return strtoupper($name);
})->reject(function ($name) { 
   return empty($name);
});

Wie Sie sehen können, Collection Die Mit der Klasse können Sie Aufrufe an andere Methoden verketten, um eine reibungslose Ausführung der Karte zu erreichen und Vorgänge auf dem zugrunde liegenden Array zu reduzieren. Im Allgemeinen sind Sammlungen unveränderlich, was bedeutet, dass jede Collection Alle Methoden geben eine neue Collection-Instanz zurück.

Erstellen Sie eine Sammlung

Wie oben erwähnt, gibt die Hilfsfunktion collect eine neue Sammlung für zurück angegebenes Array IlluminateSupportCollection Beispiel. Daher können wir ganz einfach eine Sammlung wie diese erstellen:

$collection = collect([1, 2, 3]);

{tip} Normalerweise sind die von Eloquent-Abfragen zurückgegebenen Ergebnisse allesamt Collection-Instanzen.

Erweiterte Sammlungen

Sammlungen sind „makrofähig“, sodass Sie dem < andere Methoden hinzufügen können 🎜> Klasse zur Ausführungszeit. Fügen Sie der Klasse Collection beispielsweise eine Collection-Methode mit dem folgenden Code hinzu: toUpper

use Illuminate\Support\Str;Collection::macro('toUpper', function () { 
   return $this->map(function ($value) {  
         return Str::upper($value);    
       });
 });$collection = collect(['first', 'second']);
 $upper = $collection->toUpper();
 // ['FIRST', 'SECOND']

Normalerweise sollten Sie Sammlungsmakros innerhalb eines Dienstanbieters deklarieren.

Verfügbare Methoden

Im folgenden Dokumentinhalt werden wir jede Methode der Collection-Klasse besprechen. Beachten Sie, dass alle Methoden über einen verketteten Zugriff auf elegante Weise auf Arrays zugreifen können. Außerdem geben fast alle Methoden eine neue Collection-Instanz zurück, sodass Sie bei Bedarf eine Originalkopie der Sammlung speichern können:

alle
Durchschnitt
Durchschnitt
Stückzahl
Zusammenklappen se
combine
concat
contains
containsStr ict
count
crossJoin
dd
diff
di ffAssoc
diffKeys
dump
each
eachSpread
jeder
außer
Filter
erste
Tanne stWhere
flatMap
flatten
flip
forget
forPage
get
groupBy
ist
implodiert
intersect
intersectByKeys
isEmpty
isNo tEmpty
keyBy
Tasten
letztes
Makro
make
map
mapInto
mapSpread
mapToGroups
mapWithKeys
max
Median
merge
min
Modus
nth
nur
Pad
partitio n
Pfeife
zupfen
Pop
voranstellen
ziehen
drücken
setzen
zufällig
reduzieren
ablehnen
rückwärts
Suche
Umschalt
Zufallswiedergabe
s Läuse
einige
sortieren
sortierenNach
sortierenNachDesc
sortKeys
sortKeysDesc
spleißen
split
sum
Nimm
tippe
Mal
toArray
toJson
trans bilden
Union
einzigartig
uniqueStrict
es sei denn
u nlessEmpty
unlessNotEmpty
unwrap
values
when
whenEmpty
whenNotEmpty
where
whereStrict
whereBetween
whereIn
whereInStrict
whereInstanceOf
whereNotBetween
whereNotIn
whereNotInStrict
wrap
zip

方法列表

all()

all方法返回该集合表示的底层数组:

collect([1, 2, 3])->all();// [1, 2, 3]

average()

avg方法的别名.

avg()

avg 方法返回给定键的平均值

$average = collect([['foo' => 10],
             ['foo' => 10], 
            ['foo' => 20], 
            ['foo' => 40]])->avg('foo');
// 20
$average = collect([1, 1, 2, 4])->avg();
// 2

chunk()

chunk方法将集合拆成多个给定大小的小集合:

$collection = collect([1, 2, 3, 4, 5, 6, 7]);
$chunks = $collection->chunk(4);
$chunks->toArray();
// [[1, 2, 3, 4], [5, 6, 7]]

这个方法在使用网格系统的 视图中特别适用,例如 Bootstrap。 想象你有一个 Eloquent模型的集合要在网格中显示:

@foreach ($products->chunk(3) as $chunk)  
  <div class="row">
        @foreach ($chunk as $product)         
           <div class="col-xs-4">
              {{ $product->name }}
           </div>
        @endforeach   
   </div>
 @endforeach

collapse()

collapse方法将多个数组的集合合并成一个数组的集合:

$collection = collect([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
$collapsed = $collection->collapse();
$collapsed->all();
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

combine()

combine Die Methode kann den Wert einer Sammlung als Schlüssel verwenden und dann den Wert eines anderen Arrays oder einer anderen Sammlung als Wert in einer Sammlung zusammenführen:

$collection = collect(['name', 'age']);
$combined = $collection->combine(['George', 29]);
$combined->all();
// ['name' => 'George', 'age' => 29]

concat()

concat Methode konvertiert das angegebene 数组 Oder der eingestellte Wert wird am Ende des Satzes angehängt:

$collection = collect(['John Doe']);
$concatenated = $collection->concat(['Jane Doe'])->concat(['name' => 'Johnny Doe']);
$concatenated->all();
// ['John Doe', 'Jane Doe', 'Johnny Doe']

contains()

contains Methode bestimmt, ob die Menge das angegebene Sammlungselement enthält:

$collection = collect(['name' => 'Desk', 'price' => 100]);
$collection->contains('Desk');
// true
$collection->contains('New York');
// false

Sie können auch verwenden Die contains-Methode übergibt eine Reihe von Schlüssel/Wert-Paaren, mit denen ermittelt werden kann, ob das Schlüssel/Wert-Paar in der Sammlung vorhanden ist:

$collection = collect([
    ['product' => 'Desk', 'price' => 200],    
    ['product' => 'Chair', 'price' => 100],
]);
$collection->contains('product', 'Bookcase');
// false

Schließlich können Sie auch die contains-Methode verwenden, um Übergeben Sie eine Rückruffunktion, um Ihren eigenen Real-Test auszuführen:

$collection = collect([1, 2, 3, 4, 5]);
$collection->contains(function ($value, $key) {
    return $value > 5;
  });
// false

contains Die Methode verwendet „entspannte“ Vergleiche beim Überprüfen der Werte von Sammlungselementen, was bedeutet, dass Zeichenfolgen mit ganzzahligen Werten als gleichwertig mit ganzen Zahlen desselben Werts behandelt werden. Im Gegensatz dazu verwendet die Methode containsStrict einen „strengen“ Vergleich zum Filtern.

containsStrict()

Diese Methode ähnelt der contains-Methode, Stattdessen wird ein „strenger“ Vergleich verwendet, um alle Werte zu vergleichen.

count()

count Die Methode gibt die Gesamtzahl der Sammlungselemente in dieser Sammlung zurück:

$collection = collect([1, 2, 3, 4]);
$collection->count();
// 4

crossJoin()

crossJoin Die Methode verknüpft die Werte des angegebenen Arrays oder Satzes über Kreuz und gibt das kartesische Produkt aller möglichen Permutationen zurück:

$collection = collect([1, 2]);
$matrix = $collection->crossJoin(['a', 'b']);
$matrix->all();
/*
    [
        [1, 'a'],
        [1, 'b'],
        [2, 'a'],
        [2, 'b'],
    ]
*/
$collection = collect([1, 2]);
$matrix = $collection->crossJoin(['a', 'b'], ['I', 'II']);
$matrix->all();
/*
    [
        [1, 'a', 'I'],
        [1, 'a', 'II'],
        [1, 'b', 'I'],
        [1, 'b', 'II'],
        [2, 'a', 'I'],
        [2, 'a', 'II'],
        [2, 'b', 'I'],
        [2, 'b', 'II'],
    ]
*/

dd()

dd Methode zum Drucken von Sammlungselementen und Unterbrechen der Skriptausführung:

$collection = collect(['John Doe', 'Jane Doe']);
$collection->dd();
/*
    Collection {
        #items: array:2 [
            0 => "John Doe"
            1 => "Jane Doe"
        ]
    }
*/

Wenn Sie die Skriptausführung nicht unterbrechen möchten, verwenden Sie stattdessen die Methode dump.

diff()

diff Methode vergleicht eine Sammlung mit anderen Sammlungen oder reinem PHP 数组 Vergleich . Geben Sie dann die Werte zurück, die in der ursprünglichen Sammlung, aber nicht in der angegebenen Sammlung vorhanden sind:

$collection = collect([1, 2, 3, 4, 5]);
$diff = $collection->diff([2, 4, 6, 8]);
$diff->all();
// [1, 3, 5]

diffAssoc()

< Die 🎜>-Methode wird anhand ihrer Schlüssel und Werte mit einer anderen Sammlung oder PHP diffAssoc verglichen. Diese Methode gibt Schlüssel/Wert-Paare zurück, deren ursprüngliche Sammlung nicht in der angegebenen Sammlung vorhanden ist: 数组

$collection = collect([ 
   'color' => 'orange',    
   'type' => 'fruit',    
   'remain' => 6
   ]);
$diff = $collection->diffAssoc([ 
   'color' => 'yellow',    
   'type' => 'fruit',    
   'remain' => 3,    
   'used' => 6
   ]);
  $diff->all();
 // ['color' => 'orange', 'remain' => 6]

Die Methode

diffKeys()

diffKeys vergleicht die Schlüssel einer anderen Sammlung oder von PHP 数组 und gibt dann den Schlüssel zurück, der dem Schlüssel entspricht, der in der ursprünglichen Sammlung, aber nicht in der Sammlung vorhanden ist angegebene Sammlung / Wertepaare:

$collection = collect([
    'one' => 10,    
    'two' => 20,    
    'three' => 30,    
    'four' => 40,    
    'five' => 50,
   ]);
$diff = $collection->diffKeys([
    'two' => 2,    
    'four' => 4,    
    'six' => 6,    
    'eight' => 8,
   ]);
$diff->all();
// ['one' => 10, 'three' => 30, 'five' => 50]

dump()

dump Methode wird zum Drucken von Sammlungselementen verwendet:

$collection = collect(['John Doe', 'Jane Doe']);
$collection->dump();
/*
    Collection {
        #items: array:2 [
            0 => "John Doe"
            1 => "Jane Doe"
        ]
    }
*/

Wenn Sie die Ausführung des Skripts nach dem Drucken der Sammlung beenden möchten, verwenden Sie dd-Methode stattdessen.

each()

each Die Methode wird verwendet, um die Sammlungselemente zu durchlaufen und sie an die Rückruffunktion zu übergeben:

$collection->each(function ($item, $key) {
    //
});

Wenn Sie die Schleife über die Sammlungselemente unterbrechen möchten, geben Sie einfach false in Ihrer Rückruffunktion zurück :

$collection->each(function ($item, $key) {
    if (/* 某些条件 */ ) 
  { 
         return false;   
    
    }
 });

eachSpread()

eachSpread Die Methode wird verwendet, um die Sammlungselemente zu durchlaufen und den Wert jedes verschachtelten Sammlungselements an die Rückruffunktion zu übergeben:

$collection = collect([['John Doe', 35], ['Jane Doe', 33]]);
$collection->eachSpread(function ($name, $age) {
    //
 });

Sie können false in der Rückruffunktion zurückgeben Um die Schleife zu unterbrechen: Die Methode

$collection->eachSpread(function ($name, $age) {
    return false;
});

every()

every kann zur Validierung jedes Elements verwendet werden in der Sammlung Ob das Element den angegebenen Bedingungstest besteht:

collect([1, 2, 3, 4])->every(function ($value, $key) {
    return $value > 2;
 });
// false

Wenn die Sammlung leer ist, every gibt true zurück:

$collection = collect([]);
$collection->every(function($value, $key)
 {
   return $value > 2;
 });
// true

except()

except Die Methode gibt die Sammlung außer zurück die angegebene Alle Sammlungselemente außer Schlüssel:

$collection = collect(['product_id' => 1, 'price' => 100, 'discount' => false]);
$filtered = $collection->except(['price', 'discount']);
$filtered->all();
// ['product_id' => 1]

und except entspricht der Methode nur.

filter()

filter Die Methode verwendet die angegebene Rückruffunktion, um die Sammlung zu filtern und behält nur die Sammlungselemente bei, die den angegebenen Bedingungstest bestehen:

$collection = collect([1, 2, 3, 4]);
$filtered = $collection->filter(function ($value, $key) {
    return $value > 2;
  });
$filtered->all();
// [3, 4]

Wenn keine Rückruffunktion bereitgestellt wird, werden alle Elemente in der Sammlung, die false zurückgeben, entfernt :

$collection = collect([1, 2, 3, null, false, '', 0, []]);
$collection->filter()->all();
// [1, 2, 3]

und filter entsprechen der Methode reject. Die Methode

first()

first gibt das erste Element in der Sammlung zurück, das die angegebene Bedingung erfüllt test:

collect([1, 2, 3, 4])->first(function ($value, $key) { 
   return $value > 2;
 });
// 3

Sie können auch ohne Parameterübergabe aufrufenfirst Methode zum Abrufen des ersten Elements in der Auflistung. Wenn die Sammlung leer ist, wird null zurückgegeben:

collect([1, 2, 3, 4])->first();
// 1

Die Methode

firstWhere()

firstWhere gibt das erste Element in der Sammlung zurück, das das angegebene Schlüssel/Wert-Paar enthält:

$collection = collect([
    ['name' => 'Regena', 'age' => null],    
    ['name' => 'Linda', 'age' => 14],    
    ['name' => 'Diego', 'age' => 23],    
    ['name' => 'Linda', 'age' => 84],
  ]);
$collection->firstWhere('name', 'Linda');
// ['name' => 'Linda', 'age' => 14]

Sie können auch Operatoren verwenden, um firstWhere aufzurufen Methode:

$collection->firstWhere('age', '>=', 18);
// ['name' => 'Diego', 'age' => 23]

und wo Auf die gleiche Weise können Sie einen Parameter an die Methode firstWhere übergeben. In diesem Fall gibt die Methode firstWhere das erste Sammlungselement zurück, dessen Wert für den angegebenen Schlüssel „wahr“ ist:

$collection->firstWhere('age');
// ['name' => 'Linda', 'age' => 14]

flatMap()

flatMap Die Methode durchläuft die Sammlung und übergibt jeden darin enthaltenen Wert an die angegebene Rückruffunktion. Sie können Sammlungselemente ändern und sie über Rückruffunktionen zurückgeben und so eine neue geänderte Sammlung bilden. Dann sind die durch die Menge transformierten Arrays auf derselben Ebene:

$collection = collect([
    ['name' => 'Sally'],    
    ['school' => 'Arkansas'],    
    ['age' => 28]
  ]);
$flattened = $collection->flatMap(function ($values) {
    return array_map('strtoupper', $values);
 });
$flattened->all();
// ['name' => 'SALLY', 'school' => 'ARKANSAS', 'age' => '28'];

flatten()

flatten Die Methode wandelt eine mehrdimensionale Sammlung in eine eindimensionale Sammlung um:

$collection = collect(['name' => 'taylor', 'languages' => ['php', 'javascript']]);
$flattened = $collection->flatten();
$flattened->all();
// ['taylor', 'php', 'javascript'];

Sie können optional den Parameter „Tiefe“ übergeben:

$collection = collect([
    'Apple' => [   
         ['name' => 'iPhone 6S', 'brand' => 'Apple'], 
       ],  
     'Samsung' => [  
          ['name' => 'Galaxy S7', 'brand' => 'Samsung']  
          ],
     ]);
$products = $collection->flatten(1);$products->values()->all();
/*
    [
        ['name' => 'iPhone 6S', 'brand' => 'Apple'],
        ['name' => 'Galaxy S7', 'brand' => 'Samsung'],
    ]
*/

In diesem Beispiel wird keine Tiefe übergeben, wenn Beim Aufrufen von flatten für Parameter wird das verschachtelte Array ebenfalls in ein eindimensionales Array konvertiert und dann ['iPhone 6S', 'Apple', 'Galaxy S7', 'Samsung'] zurückgegeben. Durch die Übergabe des Tiefenparameters können Sie die Anzahl der Ebenen im zurückgegebenen Array begrenzen.

flip()

flip Die Methode tauscht die Schlüssel der Sammlung mit den entsprechenden Werten aus:

$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$flipped = $collection->flip();$flipped->all();
// ['taylor' => 'name', 'laravel' => 'framework']

forget()

forget Die Methode entfernt den entsprechenden Inhalt aus der Sammlung mit dem angegebenen Schlüssel:

$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$collection->forget('name');$collection->all();
// ['framework' => 'laravel']

{note} Im Gegensatz zu den meisten Sammlungsmethoden gibt forget keine geänderte neue Sammlung zurück. Es wird die ursprüngliche Sammlung geändert direkt. Die Methode

forPage()

forPage gibt ein neues Sammlungselement zurück, das die angegebene Seitenzahl enthält versammeln. Diese Methode akzeptiert die Seitenzahl als erstes Argument und die Anzahl der pro Seite angezeigten Elemente als zweites Argument:

$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9]);
$chunk = $collection->forPage(2, 3);$chunk->all();
// [4, 5, 6]

get()

get Die Methode gibt das Sammlungselement mit dem angegebenen Schlüssel zurück. Wenn der Schlüssel nicht in der Sammlung vorhanden ist, gibt sie null

$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$value = $collection->get('name');
// taylor

zurück. Sie können einen Standardwert auswählen, der als zweiter Parameter übergeben wird:

$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$value = $collection->get('foo', 'default-value');
// default-value

Sie können sogar eine Callback-Funktion als Standardwert übergeben. Wenn der angegebene Schlüssel nicht existiert, wird das Ergebnis der Callback-Funktion zurückgegeben:

$collection->get('email', function () {
    return 'default-value';
 });
 // default-value

Die

groupBy()

groupBy-Methode gruppiert Sammlungselemente basierend auf einem angegebenen Schlüssel:

$collection = collect([
    ['account_id' => 'account-x10', 'product' => 'Chair'],    
    ['account_id' => 'account-x10', 'product' => 'Bookcase'],    
    ['account_id' => 'account-x11', 'product' => 'Desk'],
  ]);
$grouped = $collection->groupBy('account_id');$grouped->toArray();
/*
    [
        'account-x10' => [
            ['account_id' => 'account-x10', 'product' => 'Chair'],
            ['account_id' => 'account-x10', 'product' => 'Bookcase'],
        ],
        'account-x11' => [
            ['account_id' => 'account-x11', 'product' => 'Desk'],
        ],
    ]
*/

Sie können eine Rückruffunktion anstelle einer Zeichenfolge übergeben . Diese Rückruffunktion sollte den Wert des Schlüssels zurückgeben, nach dem Sie gruppieren möchten:

$grouped = $collection->groupBy(function ($item, $key) {
    return substr($item['account_id'], -3);
   });
$grouped->toArray();
/*
    [
        'x10' => [
            ['account_id' => 'account-x10', 'product' => 'Chair'],
            ['account_id' => 'account-x10', 'product' => 'Bookcase'],
        ],
        'x11' => [
            ['account_id' => 'account-x11', 'product' => 'Desk'],
        ],
    ]
*/

Ein Array kann für mehrere Gruppierungskriterien übergeben werden. Jedes Array-Element entspricht der entsprechenden Ebene innerhalb des mehrdimensionalen Arrays:

$data = new Collection([
    10 => ['user' => 1, 'skill' => 1, 'roles' => ['Role_1', 'Role_3']],    
    20 => ['user' => 2, 'skill' => 1, 'roles' => ['Role_1', 'Role_2']],    
    30 => ['user' => 3, 'skill' => 2, 'roles' => ['Role_1']],    
    40 => ['user' => 4, 'skill' => 2, 'roles' => ['Role_2']],
  ]);
$result = $data->groupBy([
    'skill',    
    function ($item) {
          return $item['roles'];
              },
          ], 
        $preserveKeys = true);
/*
[
    1 => [
        'Role_1' => [
            10 => ['user' => 1, 'skill' => 1, 'roles' => ['Role_1', 'Role_3']],
            20 => ['user' => 2, 'skill' => 1, 'roles' => ['Role_1', 'Role_2']],
        ],
        'Role_2' => [
            20 => ['user' => 2, 'skill' => 1, 'roles' => ['Role_1', 'Role_2']],
        ],
        'Role_3' => [
            10 => ['user' => 1, 'skill' => 1, 'roles' => ['Role_1', 'Role_3']],
        ],
    ],
    2 => [
        'Role_1' => [
            30 => ['user' => 3, 'skill' => 2, 'roles' => ['Role_1']],
        ],
        'Role_2' => [
            40 => ['user' => 4, 'skill' => 2, 'roles' => ['Role_2']],
        ],
    ],
];
*/

has()

has Die Methode ermittelt, ob der angegebene Schlüssel in der Sammlung vorhanden ist:

$collection = collect(['account_id' => 1, 'product' => 'Desk', 'amount' => 5]);
$collection->has('product');
// true
$collection->has(['product', 'amount']);
// true
$collection->has(['amount', 'price']);
// false

implode()

implode Methode wird zum Zusammenführen von Sammlungselementen verwendet. Seine Parameter hängen von der Art der Sammlungsgegenstände ab. Wenn die Sammlung Arrays oder Objekte enthält, sollten Sie die Schlüssel der Eigenschaften, die Sie kombinieren möchten, und die Zeichenfolge, die Sie zwischen den Werten einfügen möchten, an „splice“ übergeben:

$collection = collect([
    ['account_id' => 1,'product' => 'Desk'],    
    ['account_id' => 2, 'product' => 'Chair'],
  ]);
$collection->implode('product', ', ');
// Desk, Chair

Wenn die Sammlung einfache enthält Charaktere Zeichenfolge oder numerischer Wert, Sie müssen nur die zum „Spleißen“ verwendete Zeichenfolge als einzigen Parameter dieser Methode übergeben:

collect([1, 2, 3, 4, 5])->implode('-');
// '1-2-3-4-5'

intersect()

intersect Die Methode entfernt aus der ursprünglichen Sammlung alle Werte, die in der angegebenen 数组 oder Sammlung nicht vorhanden sind. Die generierte Sammlung behält die Schlüssel der ursprünglichen Sammlung bei:

$collection = collect(['Desk', 'Sofa', 'Chair']);
$intersect = $collection->intersect(['Desk', 'Chair', 'Bookcase']);
$intersect->all();
// [0 => 'Desk', 2 => 'Chair']

intersectByKeys()

intersectByKeys Methode from Entfernt das angegebene 数组 aus der ursprünglichen Sammlung oder ein beliebiger Schlüssel, der nicht in der Sammlung vorhanden ist:

$collection = collect([
    'serial' => 'UX301', 
    'type' => 'screen', 
    'year' => 2009
  ]);
$intersect = $collection->intersectByKeys([ 
   'reference' => 'UX404', 
   'type' => 'tab', 
   'year' => 2011
 ]);
$intersect->all();
// ['type' => 'screen', 'year' => 2009]

isEmpty()

Wenn die Sammlung leer ist , isEmpty Die Methode gibt true zurück, andernfalls wird zurückgegeben false:

collect([])->isEmpty();
// true

isNotEmpty()

Wenn die Sammlung nicht leer ist, wird die isNotEmpty-Methode verwendet kehrt zurücktrue, andernfalls zurück false:

collect([])->isNotEmpty();
// false

keyBy()

keyBy Methode verwendet den angegebenen Schlüssel als Schlüssel von die Sammlung. Wenn mehrere Sammlungselemente denselben Schlüssel haben, wird in der neuen Sammlung nur das letzte Sammlungselement angezeigt:

$collection = collect([
    ['product_id' => 'prod-100', 'name' => 'Desk'],    
    ['product_id' => 'prod-200', 'name' => 'Chair'],
  ]);
$keyed = $collection->keyBy('product_id');$keyed->all();
/*
    [
        'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
        'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
    ]
*/

Sie können in dieser Methode auch eine Callback-Funktion übergeben. Der von dieser Rückruffunktion zurückgegebene Wert wird als Schlüssel der Sammlung verwendet:

$keyed = $collection->keyBy(function ($item) {
    return strtoupper($item['product_id']);
   });
$keyed->all();
/*
    [
        'PROD-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
        'PROD-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
    ]
*/

keys()

keys Die Methode gibt alle Schlüssel in der Sammlung zurück:

$collection = collect([
    'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],    
    'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
   ]);
$keys = $collection->keys();
$keys->all();
// ['prod-100', 'prod-200']

Die Methode

last()

last gibt das letzte Element in der Sammlung zurück, das den angegebenen Bedingungstest besteht:

collect([1, 2, 3, 4])->last(function ($value, $key) {
    return $value < 3;
  });
// 2

Sie können die Methode last auch ohne Übergabe aufrufen Parameter zum Abrufen des letzten Elements in . Gibt null zurück, wenn die Sammlung leer ist:

collect([1, 2, 3, 4])->last();
// 4

macro()

statischemacro Methode Ermöglicht Sie können der Klasse Collection zur Laufzeit Methoden hinzufügen. Weitere Informationen finden Sie in der Dokumentation zu Erweiterte Sammlungen.

make()

statische make-Methode erstellt eine neue Sammlungsinstanz. Weitere Informationen finden Sie im Abschnitt Sammlungen erstellen. Die Methode

map()

map durchläuft die Sammlung und übergibt jeden Wert an die angegebene Rückruffunktion . Diese Rückruffunktion kann die Sammlungselemente beliebig ändern und zurückgeben und dadurch eine neue Sammlung geänderter Sammlungselemente generieren:

$collection = collect([1, 2, 3, 4, 5]);
$multiplied = $collection->map(function ($item, $key) {
    return $item * 2;
  });
$multiplied->all();
// [2, 4, 6, 8, 10]

{note} Wie die meisten anderen Sammlungsmethoden gibt map eine neue Sammlungssammlung zurück Instanz; die ursprüngliche Sammlung wird dadurch nicht verändert. Wenn Sie die ursprüngliche Sammlung ändern möchten, verwenden Sie bitte die Methode transform.

mapInto()

mapInto() Methoden können eine Sammlung durchlaufen und neue Instanzen einer bestimmten Klasse erstellen, indem sie Werte an den Konstruktor übergeben:

class Currency{    
         /**
     * Create a new currency instance.
     *
     * @param  string  $code
     * @return void
     */  
function __construct(string $code) 
   {     
      $this->code = $code;   
    }
  }
$collection = collect(['USD', 'EUR', 'GBP']);
$currencies = $collection->mapInto(Currency::class);
$currencies->all();
// [Currency('USD'), Currency('EUR'), Currency('GBP')]

mapSpread()< Die Methode 🎜>

kann die Sammlungselemente durchlaufen und den Wert jedes verschachtelten Elements der angegebenen Rückruffunktion zuweisen. Die Rückruffunktion kann das Sammlungselement frei ändern und zurückgeben, wodurch eine neue Sammlung geänderter Sammlungselemente generiert wird: mapSpread

$collection = collect([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
$chunks = $collection->chunk(2);
$sequence = $chunks->mapSpread(function ($even, $odd) {
    return $even + $odd;
  });
$sequence->all();
// [1, 5, 9, 13, 17]

<🎜 Das Die Methode >

mapToGroups()

gruppiert Sammlungselemente nach der angegebenen Rückruffunktion. Die Rückruffunktion sollte ein assoziatives Array zurückgeben, das ein einzelnes Schlüssel/Wert-Paar enthält, was zu einer neuen Sammlung gruppierter Werte führt:

$collection = collect([
    [   
         'name' => 'John Doe',        
         'department' => 'Sales',   
     ],   
     [    
         'name' => 'Jane Doe',        
         'department' => 'Sales',   
      ],    
      [   
           'name' => 'Johnny Doe',        
           'department' => 'Marketing',    
      ]
   ]);
$grouped = $collection->mapToGroups(function ($item, $key) {
    return [$item['department'] => $item['name']];
 });
$grouped->toArray();
/*
    [
        'Sales' => ['John Doe', 'Jane Doe'],
        'Marketing' => ['Johnny Doe'],
    ]
*/
$grouped->get('Sales')->all();
// ['John Doe', 'Jane Doe']
mapToGroups

mapWithKeys()

Die Methode durchläuft die Sammlung und übergibt jeden Wert an die angegebene Rückruffunktion. Diese Rückruffunktion gibt ein assoziatives Array zurück, das ein einzelnes Schlüssel/Wert-Paar enthält:

$collection = collect([
    [     
       'name' => 'John',        
       'department' => 'Sales',        
       'email' => 'john@example.com'  
     ],   
    [   
         'name' => 'Jane',        
         'department' => 'Marketing',        
         'email' => 'jane@example.com'    
     ]
   ]);
$keyed = $collection->mapWithKeys(function ($item) { 
   return [$item['email'] => $item['name']];
 });
$keyed->all();
/*
    [
        'john@example.com' => 'John',
        'jane@example.com' => 'Jane',
    ]
*/
mapWithKeys

max()

Die Methode gibt den Maximalwert des angegebenen Schlüssels zurück:

$max = collect([['foo' => 10], ['foo' => 20]])->max('foo');
// 20
$max = collect([1, 2, 3, 4, 5])->max();
// 5
max

Die Methode

median()

median gibt den angegebenen Schlüssel zurück Median:

$median = collect([['foo' => 10], ['foo' => 10], ['foo' => 20], ['foo' => 40]])->median('foo');
// 15
$median = collect([1, 1, 2, 4])->median();
// 1.5

merge()

merge Die Methode führt die angegebenen Werte zusammen Array oder Sammlung zur ursprünglichen Sammlung hinzufügen. Wenn der Zeichenfolgenschlüssel des angegebenen Sammlungselements mit dem Zeichenfolgenschlüssel in der ursprünglichen Sammlung übereinstimmt, überschreibt der Wert des angegebenen Sammlungselements den Wert der ursprünglichen Sammlung:

$collection = collect(['product_id' => 1, 'price' => 100]);
$merged = $collection->merge(['price' => 200, 'discount' => false]);
$merged->all();
// ['product_id' => 1, 'price' => 200, 'discount' => false]

Wenn die angegebene Sammlung Die Schlüssel der Elemente sind Zahlen, und diese Werte werden am Ende der Sammlung angehängt:

$collection = collect(['Desk', 'Chair']);
$merged = $collection->merge(['Bookcase', 'Door']);
$merged->all();
// ['Desk', 'Chair', 'Bookcase', 'Door']

min()

min Die Methode gibt den Mindestwert des angegebenen Schlüssels zurück:

$min = collect([['foo' => 10], ['foo' => 20]])->min('foo');
// 10
$min = collect([1, 2, 3, 4, 5])->min();
// 1

mode()

mode Die Methode gibt den Mindestwert des angegebenen Schlüssels Mode zurück :

$mode = collect([['foo' => 10], ['foo' => 10], ['foo' => 20], ['foo' => 40]])->mode('foo');
// [10]
$mode = collect([1, 1, 2, 4])->mode();
// [1]

nth()

nthMethode erstellt von jedem n Eine neue Sammlung bestehend aus Elementen:

$collection = collect(['a', 'b', 'c', 'd', 'e', 'f']);
$collection->nth(4);
// ['a', 'e']

Sie können eine versetzte Position als zweiten Parameter übergeben:

$collection->nth(4, 1);
// ['b', 'f']

only()

only Die Methode gibt alle Sammlungselemente mit dem angegebenen Schlüssel in der Sammlung zurück:

$collection = collect(['product_id' => 1, 'name' => 'Desk', 'price' => 100, 'discount' => false]);
$filtered = $collection->only(['product_id', 'name']);
$filtered->all();
// ['product_id' => 1, 'name' => 'Desk']

und only entsprechen der Methode exclusive. Die Methode

pad()

pad füllt das Array mit den angegebenen Werten, bis das Array vollständig ist die angegebene Größe erreicht. Diese Methode verhält sich ähnlich wie die PHP-Funktion array_pad.

Um nach links zu füllen, sollten Sie negative Werte verwenden. Wenn der absolute Wert der angegebenen Größe kleiner oder gleich der Länge des Arrays ist, erfolgt keine Auffüllung:

$collection = collect(['A', 'B', 'C']);
$filtered = $collection->pad(5, 0);
$filtered->all();
// ['A', 'B', 'C', 0, 0]
$filtered = $collection->pad(-5, 0);
$filtered->all();
// [0, 0, 'A', 'B', 'C']

Die partition()

partition-Methode kann mit list in der PHP-Funktion kombiniert werden Wird in Kombination verwendet, um Elemente, die die angegebene Bedingung erfüllen, von solchen zu trennen, die dies nicht tun:

$collection = collect([1, 2, 3, 4, 5, 6]);
list($underThree, $equalOrAboveThree) = $collection->partition(function ($i) {
    return $i < 3;
   });
$underThree->all();
// [1, 2]
$equalOrAboveThree->all();
// [3, 4, 5, 6]

pipe()

pipe Die Methode übergibt die Sammlung an die angegebene Rückruffunktion und gibt das Ergebnis zurück:

$collection = collect([1, 2, 3]);
$piped = $collection->pipe(function ($collection) {
    return $collection->sum();
 });
 // 6

pluck()

pluck Die Methode kann alle Werte abrufen, die dem angegebenen Schlüssel in der Sammlung entsprechen:

$collection = collect([
    ['product_id' => 'prod-100', 'name' => 'Desk'],    
    ['product_id' => 'prod-200', 'name' => 'Chair'],
  ]);
$plucked = $collection->pluck('name');
$plucked->all();
// ['Desk', 'Chair']

Sie können auch den Schlüssel zum Generieren der Sammlung angeben, indem Sie den zweiten Parameter übergeben:

$plucked = $collection->pluck('name', 'product_id');
$plucked->all();
// ['prod-100' => 'Desk', 'prod-200' => 'Chair']

Wenn doppelte Schlüssel vorhanden sind, wird das letzte passende Element in den Popup-Satz eingefügt:

$collection = collect([
    ['brand' => 'Tesla',  'color' => 'red'],    
    ['brand' => 'Pagani', 'color' => 'white'],    
    ['brand' => 'Tesla',  'color' => 'black'],    
    ['brand' => 'Pagani', 'color' => 'orange'],
  ]);
$plucked = $collection->pluck('color', 'brand');
$plucked->all();
// ['Tesla' => 'black', 'Pagani' => 'orange']

pop()

pop Die Methode entfernt das letzte Sammlungselement aus der Sammlung und gibt es zurück:

$collection = collect([1, 2, 3, 4, 5]);
$collection->pop();
// 5
$collection->all();
// [1, 2, 3, 4]

prepend()

prepend Die Methode fügt den angegebenen Wert am Anfang der Sammlung hinzu:

$collection = collect([1, 2, 3, 4, 5]);
$collection->prepend(0);
$collection->all();
// [0, 1, 2, 3, 4, 5]

Sie können auch einen zweiten Parameter übergeben, um den Schlüssel des neu hinzugefügten Sammlungselements festzulegen:

$collection = collect(['one' => 1, 'two' => 2]);
$collection->prepend(0, 'zero');
$collection->all();
// ['zero' => 0, 'one' => 1, 'two' => 2]

pull()

pull Die Methode entfernt den Wert, der dem angegebenen Schlüssel entspricht, aus der Sammlung und gibt Folgendes zurück:

$collection = collect(['product_id' => 'prod-100', 'name' => 'Desk']);
$collection->pull('name');
// 'Desk'
$collection->all();
// ['product_id' => 'prod-100']

push()

push Die Methode hängt den angegebenen Wert an das Ende des Sammlungselements an:

$collection = collect([1, 2, 3, 4]);
$collection->push(5);
$collection->all();
// [1, 2, 3, 4, 5]

put()

put Die Methode legt das angegebene Schlüssel-Wert-Paar innerhalb der Sammlung fest:

$collection = collect(['product_id' => 1, 'name' => 'Desk']);
$collection->put('price', 100);
$collection->all();
// ['product_id' => 1, 'name' => 'Desk', 'price' => 100]

random()

random Die Methode gibt ein zufälliges Element aus der Sammlung zurück:

$collection = collect([1, 2, 3, 4, 5]);
$collection->random();
// 4 - (retrieved randomly)

Sie können optional eine Ganzzahl an random übergeben, um die Anzahl der abzurufenden Zufallselemente anzugeben. Solange Sie die Menge, die Sie erhalten möchten, explizit übergeben, wird eine Sammlung von Elementen zurückgegeben:

$random = $collection->random(3);
$random->all();
// [2, 4, 5] - (retrieved randomly)

Wenn die Sammlung weniger als die angegebene Anzahl von Elementen enthält, löst die Methode InvalidArgumentException aus.

reduce()

reduce Methode übergibt das Ergebnis jeder Iteration an die nächste Iteration bis zur Sammlung Auf einen einzigen Wert reduzieren:

$collection = collect([1, 2, 3]);
$total = $collection->reduce(function ($carry, $item) {
    return $carry + $item;
 });
 // 6

bei der ersten Iteration $carry Der numerische Wert ist null; Sie können jedoch auch seinen Anfangswert angeben, indem Sie den zweiten Parameter an reduce übergeben:

$collection->reduce(function ($carry, $item) {
   return $carry + $item;}, 4);
  // 10

reject()

reject Die Methode filtert die Sammlung mithilfe der angegebenen Rückruffunktion. Wenn die Callback-Funktion true zurückgibt, wird das entsprechende Sammlungselement aus der Sammlung entfernt: Die Methoden

$collection = collect([1, 2, 3, 4]);
$filtered = $collection->reject(function ($value, $key) {
    return $value > 2;
  });
$filtered->all();
// [1, 2]

und reject entsprechen der Methode filter.

reverse()

reverse Methode zum Umkehren der Reihenfolge der Sammlungselemente und Beibehaltung der Originalschlüssel:

$collection = collect(['a', 'b', 'c', 'd', 'e']);
$reversed = $collection->reverse();
$reversed->all();
/*
    [
        4 => 'e',
        3 => 'd',
        2 => 'c',
        1 => 'b',
        0 => 'a',
    ]
*/

Die Methode

search()

search durchsucht die Sammlung nach einem bestimmten Wert und gibt ihren Schlüssel zurück. Wenn nicht gefunden, wird false zurückgegeben.

$collection = collect([2, 4, 6, 8]);
$collection->search(4);
// 1

sucht auf „entspannte“ Weise, was bedeutet, dass Zeichenfolgen mit ganzzahligen Werten als gleichwertig mit ganzen Zahlen desselben Werts betrachtet werden. Verwenden Sie zum Suchen die „strenge“ Methode, übergeben Sie einfach true Als zweites Argument der Methode:

$collection->search('4', true);
// false

Alternativ können Sie nach dem ersten Sammlungselement suchen, das den Bedingungstest besteht, indem Sie eine Rückruffunktion übergeben:

$collection->search(function ($item, $key) {
    return $item > 5;
  });
// 2

shift()

shift Die Methode entfernt das erste Sammlungselement der Sammlung und gibt es zurück:

$collection = collect([1, 2, 3, 4, 5]);
$collection->shift();
// 1
$collection->all();
// [2, 3, 4, 5]

shuffle()

shuffle Methode mischt Sammlungselemente nach dem Zufallsprinzip:

$collection = collect([1, 2, 3, 4, 5]);
$shuffled = $collection->shuffle();
$shuffled->all();
// [3, 2, 5, 1, 4] - (generated randomly)

slice()

slice Die Methode gibt den Teil der Sammlung zurück, der am angegebenen Index beginnt:

$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
$slice = $collection->slice(4);
$slice->all();
// [5, 6, 7, 8, 9, 10]

Wenn Sie die Größe des zurückgegebenen Inhalts begrenzen möchten, können Sie Ihre gewünschte Größe als zweites Argument an die Methode übergeben:

$slice = $collection->slice(4, 2);
$slice->all();
// [5, 6]

Standardmäßig behält der zurückgegebene Inhalt die Originalschlüssel bei. Wenn Sie die Originalschlüssel nicht behalten möchten, können Sie zur Neuindizierung die Methode values verwenden.

some()

contains Alias ​​​​für die Methode. Die Methode

sort()

sort sortiert die Sammlung. Die sortierte Sammlung behält die Schlüssel des ursprünglichen Arrays bei, daher verwenden wir in diesem Beispiel die Methode values, um die Schlüssel auf fortlaufend nummerierte Indizes zurückzusetzen:

$collection = collect([5, 3, 1, 2, 4]);
$sorted = $collection->sort();
$sorted->values()->all();
// [1, 2, 3, 4, 5]

Wenn Sie mehr haben Für erweiterte Sortieranforderungen können Sie die Rückruffunktion über Ihren eigenen Algorithmus an sort übergeben. Sehen Sie sich die PHP-Dokumentation für uasort an, das ist, was die sort-Methode der Sammlung unter der Haube aufruft.

{tip} Wenn Sie verschachtelte Arrays oder Objekte sortieren müssen, lesen Sie bitte die Methoden sortBy und sortByDesc.

Die Methode

sortBy()

sortBy sortiert die Sammlung basierend auf dem angegebenen Schlüssel. Die sortierte Sammlung behält die Schlüssel des ursprünglichen Arrays bei, daher verwenden wir in diesem Beispiel values Die Methode setzt den Schlüssel auf einen fortlaufend nummerierten Index zurück:

$collection = collect([
    ['name' => 'Desk', 'price' => 200],    
    ['name' => 'Chair', 'price' => 100],    
    ['name' => 'Bookcase', 'price' => 150],
  ]);
$sorted = $collection->sortBy('price');$sorted->values()->all();
/*
    [
        ['name' => 'Chair', 'price' => 100],
        ['name' => 'Bookcase', 'price' => 150],
        ['name' => 'Desk', 'price' => 200],
    ]
*/

Sie können auch Ihre eigene Rückruffunktion übergeben, die bestimmt, wie die Werte der Sammlung sortiert werden sollen:

$collection = collect([
    ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],    
    ['name' => 'Chair', 'colors' => ['Black']],    
    ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
  ]);
$sorted = $collection->sortBy(function ($product, $key) {
    return count($product['colors']);
  });
$sorted->values()->all();
/*
    [
        ['name' => 'Chair', 'colors' => ['Black']],
        ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],
        ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
    ]
*/

sortByDesc()

Diese Methode ist die gleiche wie sortBy Dieselbe Methode, aber sortiert die Sammlung in umgekehrter Reihenfolge.

sortKeys()

sortKeys Die Methode sortiert die Sammlung nach dem Schlüssel des zugrunde liegenden assoziativen Arrays:

$collection = collect([ 
   'id' => 22345,    
   'first' => 'John',    
   'last' => 'Doe',
  ]);
$sorted = $collection->sortKeys();$sorted->all();
/*
    [
        'first' => 'John',
        'id' => 22345,
        'last' => 'Doe',
    ]
*/

sortKeysDesc()

Diese Methode ist das Gleiche wie sortKeys Die Methode ist dieselbe, die Sammlung wird jedoch in umgekehrter Reihenfolge sortiert.

splice()

splice Die Methode entfernt das Sammlungselementfragment und gibt es zurück, beginnend am angegebenen Index:

$collection = collect([1, 2, 3, 4, 5]);
$chunk = $collection->splice(2);
$chunk->all();
// [3, 4, 5]
$collection->all();
// [1, 2]

Sie können einen zweiten Parameter übergeben, um die Größe des gelöschten Inhalts zu begrenzen:

$collection = collect([1, 2, 3, 4, 5]);
$chunk = $collection->splice(2, 1);
$chunk->all();
// [3]
$collection->all();
// [1, 2, 4, 5]

Darüber hinaus können Sie Sie können einen dritten Parameter übergeben, der ein neues Parameterelement enthält, um das gelöschte Sammlungselement in der Sammlung zu ersetzen:

$collection = collect([1, 2, 3, 4, 5]);
$chunk = $collection->splice(2, 1, [10, 11]);
$chunk->all();
// [3]
$collection->all();
// [1, 2, 10, 11, 4, 5]

split()

split Die Methode teilt die Sammlung entsprechend dem angegebenen Wert auf:

$collection = collect([1, 2, 3, 4, 5]);
$groups = $collection->split(3);
$groups->toArray();
// [[1, 2], [3, 4], [5]]

sum()

sum Die Methode gibt die Summe aller Elemente in der Sammlung zurück:

collect([1, 2, 3, 4, 5])->sum();
// 15

Wenn die Sammlung verschachtelte Arrays oder Objekte enthält, sollten Sie einen Schlüssel übergeben, der den zu summierenden Wert angibt:

$collection = collect([
    ['name' => 'JavaScript: The Good Parts', 'pages' => 176],    
    ['name' => 'JavaScript: The Definitive Guide', 'pages' => 1096],
  ]);
$collection->sum('pages');
// 1272

Zusätzlich , können Sie Ihre eigene Rückruffunktion übergeben, um zu entscheiden, welche Werte in der Sammlung zum Summieren verwendet werden sollen:

$collection = collect([
    ['name' => 'Chair', 'colors' => ['Black']],    
    ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],    
    ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
   ]);
$collection->sum(function ($product) {
    return count($product['colors']);
   });
// 6

take()

take Die Methode gibt eine neue Sammlung mit der angegebenen Anzahl von Elementen zurück:

$collection = collect([0, 1, 2, 3, 4, 5]);
$chunk = $collection->take(3);
$chunk->all();
// [0, 1, 2]

Sie können auch eine negative Ganzzahl übergeben, um die angegebene Anzahl von Elementen vom Ende der Sammlung abzurufen:

$collection = collect([0, 1, 2, 3, 4, 5]);
$chunk = $collection->take(-2);
$chunk->all();
// [4, 5]

tap()

tap Die Methode übergibt die angegebene Rückruffunktion an die Sammlung, sodass Sie an einem bestimmten Punkt auf die Sammlung „tippen“ und bestimmte Vorgänge an den Sammlungselementen ausführen können, ohne die Sammlung selbst zu beeinflussen:

collect([2, 4, 3, 1, 5])
    ->sort()    
    ->tap(function ($collection) { 
           Log::debug('Values after sorting', $collection->values()->toArray()); 
         })   
     ->shift();
 // 1

Die

times()

statische times-Methode erstellt eine neue Sammlung, indem sie eine Rückruffunktion eine bestimmte Anzahl von Malen aufruft:

$collection = Collection::times(10, function ($number) {
    return $number * 9;
 });
$collection->all();
// [9, 18, 27, 36, 45, 54, 63, 72, 81, 90]

Verwenden Sie diese Methode, um Eloquent in Verbindung mit einer Factory zu erstellen Modell:

$categories = Collection::times(3, function ($number) { 
   return factory(Category::class)->create(['name' => "Category No. $number"]);
  });
$categories->all();
/*
    [
        ['id' => 1, 'name' => 'Category #1'],
        ['id' => 2, 'name' => 'Category #2'],
        ['id' => 3, 'name' => 'Category #3'],
    ]
*/

toArray()

toArray Methode wandelt die Sammlung in ein PHP 数组 um. Wenn der Wert der Sammlung ein Eloquent-Modell ist, wird dieses ebenfalls in ein Array konvertiert:

$collection = collect(['name' => 'Desk', 'price' => 200]);
$collection->toArray();
/*
    [
        ['name' => 'Desk', 'price' => 200],
    ]
*/

{note} toArray konvertiert außerdem alle verschachtelten Objekte der Sammlung in Arrays. Wenn Sie das ursprüngliche Array erhalten möchten, können Sie die Methode all verwenden.

toJson()

toJson-Methode konvertiert eine Sammlung in JSON Zeichenfolge: Die Methode

$collection = collect(['name' => 'Desk', 'price' => 200]);
$collection->toJson();
// '{"name":"Desk", "price":200}'

transform()

transform durchläuft die Sammlung und ruft sie für jede Sammlung auf item Die angegebene Rückruffunktion. Der Inhalt der Sammlung wird auch durch den Rückgabewert der Rückruffunktion ersetzt:

$collection = collect([1, 2, 3, 4, 5]);
$collection->transform(function ($item, $key) {
    return $item * 2;
  });
$collection->all();
// [2, 4, 6, 8, 10]

{note} Im Gegensatz zu den meisten Sammlungsmethoden ändert transform die Sammlung selbst. Wenn Sie eine neue Sammlung erstellen möchten, können Sie die Methode map verwenden. Die Methode fügt das angegebene Array zur Sammlung hinzu. Wenn das angegebene Array dieselben Schlüssel wie die ursprüngliche Sammlung enthält, werden die Werte der ursprünglichen Sammlung nicht geändert:

$collection = collect([1 => ['a'], 2 => ['b']]);
$union = $collection->union([3 => ['c'], 1 => ['b']]);
$union->all();
// [1 => ['a'], 2 => ['b'], 3 => ['c']]

<🎜 Die Methode >

union()

gibt alle eindeutigen Elemente in der Sammlung zurück. Die zurückgegebene Sammlung behält die Schlüssel des ursprünglichen Arrays bei, daher verwenden wir in diesem Beispiel

union

Die Methode setzt den Schlüssel auf einen fortlaufend nummerierten Index zurück:

$collection = collect([1, 1, 2, 2, 3, 4, 2]);
$unique = $collection->unique();
$unique->values()->all();
// [1, 2, 3, 4]
Wenn Sie mit verschachtelten Arrays oder Objekten arbeiten, können Sie den Schlüssel angeben, der zur Bestimmung der Eindeutigkeit verwendet wird:
$collection = collect([
    ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],    
    ['name' => 'iPhone 5', 'brand' => 'Apple', 'type' => 'phone'],    
    ['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],    
    ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],    
    ['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
   ]);
 $unique = $collection->unique('brand');
 $unique->values()->all();
 /*
    [
        ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
        ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
    ]
*/

Sie können auch eine eigene Rückruffunktion an übergeben Bestimmen Sie die Einzigartigkeit des Artikels:
$unique = $collection->unique(function ($item) {
    return $item['brand'].$item['type'];
  });
$unique->values()->all();
/*
    [
        ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
        ['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],
        ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
        ['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
    ]
*/

Die Methode verwendet beim Überprüfen von Elementwerten einen Vergleich im „entspannten“ Modus, was bedeutet, dass Zeichenfolgen mit Ganzzahlwerten als gleich Ganzzahlen mit demselben Wert behandelt werden. Sie können die Methode unique()

verwenden, um einen „strengen“ Modusvergleich durchzuführen. uniquevalues

uniqueDiese Methode ist die gleiche wie die uniqueStrict-Methode Allerdings werden alle Werte im „strengen“ Modus verglichen.

Die

unless()

unless-Methode führt die angegebene Rückruffunktion aus, wenn der erste übergebene Parameter nicht true ist:

$collection = collect([1, 2, 3]);
$collection->unless(true, function ($collection) {
    return $collection->push(4);
  });
$collection->unless(false, function ($collection) {
    return $collection->push(5);
  });
$collection->all();
// [1, 2, 3, 5]

und unless Entspricht dem when Methode.

unlessEmpty()

whenNotEmpty Alias ​​​​für die Methode.

unlessNotEmpty()

whenEmpty Alias ​​​​für die Methode.

unwrap()

statisch unwrap Die Methode gibt die verfügbaren Werte innerhalb der Sammlung zurück:

Collection::unwrap(collect('John Doe'));
// ['John Doe']Collection::unwrap(['John Doe']);
// ['John Doe']Collection::unwrap('John Doe');
// 'John Doe'

values()

values Die Return-Taste der Methode wird auf einen neuen Satz fortlaufender Zahlen zurückgesetzt:

$collection = collect([
    10 => ['product' => 'Desk', 'price' => 200],    
    11 => ['product' => 'Desk', 'price' => 200]
  ]);
$values = $collection->values();$values->all();
/*
    [
        0 => ['product' => 'Desk', 'price' => 200],
        1 => ['product' => 'Desk', 'price' => 200],
    ]
*/

when()

when Methode, wenn der erste übergebene Parameter true ist , wird die angegebene Callback-Funktion ausgeführt:

$collection = collect([1, 2, 3]);
$collection->when(true, function ($collection) {
    return $collection->push(4);
  });
$collection->when(false, function ($collection) {
    return $collection->push(5);
  });
$collection->all();
// [1, 2, 3, 4]

und when entsprechen der Methode unless.

whenEmpty()

whenEmpty Methode Wenn die Sammlung leer ist, wird die angegebene Rückruffunktion ausgeführt :

$collection = collect(['michael', 'tom']);
$collection->whenEmpty(function ($collection) {
    return $collection->push('adam');
  });
$collection->all();
// ['michael', 'tom']
$collection = collect();$collection->whenEmpty(function ($collection) {
    return $collection->push('adam');
  });
$collection->all();
 // ['adam']
$collection = collect(['michael', 'tom']);
$collection->whenEmpty(function($collection) {
    return $collection->push('adam');}, function($collection) {
        return $collection->push('taylor');
      });
$collection->all();
   // ['michael', 'tom', 'taylor']

entspricht whenEmpty whenNotEmpty Methode.

whenNotEmpty()

whenNotEmpty Methode Wenn die Sammlung nicht leer ist, wird der angegebene Rückruf ausgeführt Funktion:

 $collection = collect(['michael', 'tom']);
 $collection->whenNotEmpty(function ($collection) {
    return $collection->push('adam');
   });
 $collection->all();
    // ['michael', 'tom', 'adam']
 $collection = collect();
 $collection->whenNotEmpty(function ($collection) {
     return $collection->push('adam');
   });
  $collection->all();
  // []
  $collection = collect();
  $collection->whenNotEmpty(function($collection) {
      return $collection->push('adam');
    }, 
  function($collection) {
        return $collection->push('taylor');
       });
   $collection->all();
 // ['taylor']

und whenNotEmpty entsprechen whenEmpty Methode.

where()

where Methode filtert die Sammlung nach dem angegebenen Schlüssel/Wert-Paar:

$collection = collect([
    ['product' => 'Desk', 'price' => 200],    
    ['product' => 'Chair', 'price' => 100],    
    ['product' => 'Bookcase', 'price' => 150],    
    ['product' => 'Door', 'price' => 100],
  ]);
$filtered = $collection->where('price', 100);$filtered->all();
/*
    [
        ['product' => 'Chair', 'price' => 100],
        ['product' => 'Door', 'price' => 100],
    ]
*/

where Die Methode verwendet beim Überprüfen der Sammlungselementwerte einen Vergleich im „entspannten“ Modus, was bedeutet, dass Zeichenfolgen mit ganzzahligen Werten als gleichwertig mit ganzen Zahlen desselben Werts betrachtet werden. Sie können die Methode whereStrict für den „strengen“ Modusvergleich verwenden.

whereStrict()

Diese Methode ähnelt der where-Methode; different Der Vergleichsmodus „streng“ wird verwendet.

whereBetween()

whereBetween Die Methode filtert die Sammlung anhand des angegebenen Bereichs:

$collection = collect([
    ['product' => 'Desk', 'price' => 200],    
    ['product' => 'Chair', 'price' => 80],    
    ['product' => 'Bookcase', 'price' => 150],    
    ['product' => 'Pencil', 'price' => 30],    
    ['product' => 'Door', 'price' => 100],
 ]);
$filtered = $collection->whereBetween('price', [100, 200]);
$filtered->all();
/*
    [
        ['product' => 'Desk', 'price' => 200],
        ['product' => 'Bookcase', 'price' => 150],
        ['product' => 'Door', 'price' => 100],
    ]
*/

whereIn()

whereIn wird Basierend auf dem Schlüssel /, der das angegebene Array enthält Filtern Sie die Sammlung nach Wertepaaren: Die Methode

$collection = collect([
    ['product' => 'Desk', 'price' => 200],    
    ['product' => 'Chair', 'price' => 100],    
    ['product' => 'Bookcase', 'price' => 150],    
    ['product' => 'Door', 'price' => 100],
  ]);
$filtered = $collection->whereIn('price', [150, 200]);
$filtered->all();
/*
    [
        ['product' => 'Bookcase', 'price' => 150],
        ['product' => 'Desk', 'price' => 200],
    ]
*/

whereIn verwendet einen „entspannten“ Vergleich, um den Wert eines Sammlungselements zu überprüfen, was bedeutet, dass Zeichenfolgen mit ganzzahligen Werten als ganze Zahlen gleich behandelt werden gleichen Wert. Sie können die Methode whereInStrict für den „strengen“ Modusvergleich verwenden.

whereInStrict()

Diese Methode ähnelt der whereIn-Methode; different Zum Vergleich wird der „strenge“ Modus verwendet.

whereInstanceOf()

whereInstanceOf Methode zum Filtern der Sammlung basierend auf der angegebenen Klasse:

$collection = collect([
    new User,    
    new User,    
    new Post,
 ]);
return $collection->whereInstanceOf(User::class);

whereNotBetween()

whereNotBetween Methode zum Filtern der Sammlung innerhalb des angegebenen Bereichs:

$collection = collect([
    ['product' => 'Desk', 'price' => 200],    
    ['product' => 'Chair', 'price' => 80],    
    ['product' => 'Bookcase', 'price' => 150],    
    ['product' => 'Pencil', 'price' => 30],    
    ['product' => 'Door', 'price' => 100],
  ]);
$filtered = $collection->whereNotBetween('price', [100, 200]);
$filtered->all();
/*
    [
        ['product' => 'Chair', 'price' => 80],
        ['product' => 'Pencil', 'price' => 30],
    ]
*/

whereNotIn()

whereNotIn Diese Methode filtert die Sammlung basierend auf Werten, die den angegebenen Schlüssel übergeben und nicht das angegebene Array enthalten:

$collection = collect([
    ['product' => 'Desk', 'price' => 200],    
    ['product' => 'Chair', 'price' => 100],    
    ['product' => 'Bookcase', 'price' => 150],    
    ['product' => 'Door', 'price' => 100],
  ]);
$filtered = $collection->whereNotIn('price', [150, 200]);
$filtered->all();
/*
    [
        ['product' => 'Chair', 'price' => 100],
        ['product' => 'Door', 'price' => 100],
    ]
*/

whereNotIn Die Methode verwendet einen Vergleich im „entspannten“ Modus, um den Wert des Sammlungselements zu überprüfen. Dies bedeutet, dass es sich um einen ganzzahligen Wert handelt. Zeichenfolgen werden als ganze Zahlen behandelt, die demselben Wert entsprechen. Sie können die Methode whereNotInStrict verwenden, um einen „strengen“ Modusvergleich durchzuführen.

whereNotInStrict()

Diese Methode ähnelt der whereNotIn-Methode; different Zum Vergleich wird der Modus „streng“ verwendet.

wrap()

statisch wrap Die Methode platziert den angegebenen Wert gegebenenfalls in der Sammlung:

$collection = Collection::wrap('John Doe');
$collection->all();
// ['John Doe']
$collection = Collection::wrap(['John Doe']);
$collection->all();
// ['John Doe']
$collection = Collection::wrap(collect('John Doe'));
$collection->all();
// ['John Doe']

zip()

zip Die Methode führt die Werte des angegebenen Arrays mit den Werten der ursprünglichen Sammlung am entsprechenden Index zusammen:

$collection = collect(['Chair', 'Desk']);
$zipped = $collection->zip([100, 200]);
$zipped->all();
// [['Chair', 100], ['Desk', 200]]

High-Level-Messaging

Sammlungen bieten auch Unterstützung für „High-Level-Messaging“, eine Sammlung von Verknüpfungen für allgemeine Vorgänge. Zu den Erfassungsmethoden, die Nachrichten höherer Ordnung unterstützen, gehören: average, avg, contains, each, every, filter, first, flatMap, groupBy, keyBy, map, max, min, partition, reject, some, sortBy, sortByDesc, sum und unique.

Auf jede Nachrichtenweitergabe höherer Ordnung kann als dynamische Eigenschaft der Sammlungsinstanz zugegriffen werden. Verwenden Sie beispielsweise each Nachrichten höherer Ordnung, um eine Methode für jedes Objekt in der Sammlung aufzurufen:

$users = User::where('votes', '>', 500)->get();
$users->each->markAsVip();

Ebenso können wir sum Nachrichten höherer Ordnung verwenden, um „Stimmen“ in der Benutzersammlung zu sammeln Gesamt:

$users = User::where('group', 'Development')->get();
return $users->sum->votes;
Dieser Artikel wurde zuerst auf der Website LearnKu.com veröffentlicht.