نسخه:

مجموعه ها

معرفی

این Illuminate\Support\Collection کلاس یک پوشش روان و راحت برای کار با آرایه های داده ارائه می دهد. برای مثال کد زیر را بررسی کنید. ما از collect کمک کننده برای ایجاد یک نمونه مجموعه جدید از آرایه استفاده می کنیم، strtoupper تابع را روی هر عنصر اجرا می کنیم و سپس همه عناصر خالی را حذف می کنیم:

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

همانطور که می بینید، Collection کلاس به شما اجازه می دهد تا متدهای خود را برای انجام نگاشت روان و کاهش آرایه زیرین زنجیره بزنید. به طور کلی، مجموعه ها تغییر ناپذیر هستند، به این معنی که هر Collection روش یک نمونه کاملاً جدید را برمی گرداند Collection .

ایجاد مجموعه ها

همانطور که در بالا ذکر شد، collect کمک کننده یک نمونه جدید Illuminate\Support\Collection برای آرایه داده شده برمی گرداند. بنابراین، ایجاد یک مجموعه به همین سادگی است:

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

نتایج جستجوهای Eloquent همیشه به عنوان Collection نمونه برگردانده می شوند.

گسترش مجموعه ها

مجموعه ها "macroable" هستند، که به شما امکان می دهد روش های اضافی را Collection در زمان اجرا به کلاس اضافه کنید. متد Illuminate\Support\Collection کلاس macro یک بسته را می پذیرد که با فراخوانی ماکرو شما اجرا می شود. بسته شدن ماکرو ممکن است به روش های دیگر مجموعه از طریق دسترسی پیدا کند $this ، درست مثل اینکه یک متد واقعی از کلاس مجموعه باشد. به عنوان مثال، کد زیر یک toUpper متد را به Collection کلاس اضافه می کند:

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

به طور معمول، شما باید ماکروهای مجموعه را در boot روش ارائه دهنده خدمات اعلام کنید .

استدلال های کلان

در صورت لزوم، می توانید ماکروهایی را تعریف کنید که آرگومان های اضافی را بپذیرند:

use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Lang;
 
Collection::macro('toLocale', function (string $locale) {
return $this->map(function (string $value) use ($locale) {
return Lang::get($value, [], $locale);
});
});
 
$collection = collect(['first', 'second']);
 
$translated = $collection->toLocale('es');

روش های موجود

برای اکثر اسناد مجموعه باقیمانده، در مورد هر روش موجود در Collection کلاس بحث خواهیم کرد. به یاد داشته باشید، همه این روش ها ممکن است برای دستکاری روان آرایه زیرین زنجیره شوند. علاوه بر این، تقریباً هر روش یک Collection نمونه جدید را برمی گرداند و به شما امکان می دهد در صورت لزوم نسخه اصلی مجموعه را حفظ کنید:

همه میانگین میانگین تکه chunkWhile سقوط - فروپاشی جمع آوری کنید ترکیب کردن concat شامل حاوی OneItem شامل Strict شمردن شمارش توسط crossJoin DD تفاوت diffAssoc diffAssocUsing کلیدهای diff شامل نمی شود نقطه زباله تکراری duplicatesStrict هر یک هر گسترش اطمینان حاصل شود هر بجز فیلتر کنید اولین firstOrFail اول کجا فلت مپ صاف کردن تلنگر فراموش کردن برای صفحه گرفتن دسته بندی بر اساس دارد دارای هر منفجر شدن تقاطع intersectAssoc intersectByKeys خالی است isNotEmpty است پیوستن کلید توسط کلیدها آخر تنبل کلان ساختن نقشه نقشه به mapSpread mapToGroups mapWithKeys حداکثر میانه ادغام mergeRecursive دقیقه حالت نهمین فقط پد تقسیم بندی درصد لوله لوله به لوله از طریق چیدن ترکیدن پیش انداختن کشیدن فشار دادن قرار دادن تصادفی دامنه كاهش دادن کاهش گسترش رد کردن جایگزین کردن جایگزین بازگشتی معکوس جستجو کردن انتخاب کنید تغییر مکان بر زدن جست و خیز کردن skipUntil skipWhile تکه کشویی تنها مقداری مرتب سازی مرتب سازی بر اساس sortByDesc sortDesc کلیدهای مرتب سازی sortKeysDesc sortKeysUsing اتصال شکاف splitIn مجموع گرفتن بگیر تا takeWhile ضربه زدن بار به آرایه به جیسون تبدیل undot اتحاد. اتصال منحصر بفرد منحصربفردStrict مگر اینکه مگر اینکه خالی باشد مگر اینکه خالی نباشد باز کردن ارزش ارزش های چه زمانی وقتی خالی WhenNotEmpty جایی که کجا سخت جایی که بین که در آن WhereInStrict WhereInstanceOf WhereNotBetween WhereNotIn WhereNotInStrict WhereNotNull WhereNull بسته بندی کردن زیپ

فهرست روش

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->all();
 
// [[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

chunkWhile()

این chunkWhile روش مجموعه را به مجموعه‌های چندگانه و کوچک‌تر بر اساس ارزیابی تماس داده شده تقسیم می‌کند. متغیر $chunk ارسال شده به بسته شدن ممکن است برای بازرسی عنصر قبلی استفاده شود:

$collection = collect(str_split('AABBCCCD'));
 
$chunks = $collection->chunkWhile(function (string $value, int $key, Collection $chunk) {
return $value === $chunk->last();
});
 
$chunks->all();
 
// [['A', 'A'], ['B', 'B'], ['C', 'C', 'C'], ['D']]

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]

collect()

این collect روش یک نمونه جدید را Collection با مواردی که در حال حاضر در مجموعه هستند برمی گرداند:

$collectionA = collect([1, 2, 3]);
 
$collectionB = $collectionA->collect();
 
$collectionB->all();
 
// [1, 2, 3]

این collect روش در درجه اول برای تبدیل مجموعه های تنبل به نمونه های استاندارد مفید است Collection :

$lazyCollection = LazyCollection::make(function () {
yield 1;
yield 2;
yield 3;
});
 
$collection = $lazyCollection->collect();
 
$collection::class;
 
// 'Illuminate\Support\Collection'
 
$collection->all();
 
// [1, 2, 3]

این collect روش مخصوصاً زمانی مفید است که شما یک نمونه از Enumerable مجموعه غیر تنبل دارید و نیاز دارید. از آنجایی که collect() بخشی از Enumerable قرارداد است، می توانید با خیال راحت از آن برای دریافت Collection نمونه استفاده کنید.

combine()

این combine روش مقادیر مجموعه را به عنوان کلید با مقادیر آرایه یا مجموعه دیگری ترکیب می کند:

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

concat()

این concat روش مقادیر داده شده array یا مجموعه را به انتهای مجموعه دیگری اضافه می کند:

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

این concat روش به صورت عددی کلیدها را برای مواردی که به مجموعه اصلی الحاق شده اند دوباره فهرست می کند. برای نگهداری کلیدها در مجموعه های انجمنی، به روش ادغام مراجعه کنید .

contains()

این contains روش تعیین می کند که آیا مجموعه شامل یک آیتم معین است یا خیر. می‌توانید contains برای تعیین اینکه آیا عنصری در مجموعه وجود دارد که با آزمون صدق داده شده مطابقت دارد، یک بسته را به روش بفرستید :

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

از طرف دیگر، می‌توانید رشته‌ای را به contains متد ارسال کنید تا مشخص کنید که آیا مجموعه حاوی مقدار موردی است یا خیر:

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

همچنین می‌توانید یک جفت کلید/مقدار را به contains متد ارسال کنید، که تعیین می‌کند آیا جفت داده شده در مجموعه وجود دارد یا خیر:

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

این contains روش هنگام بررسی مقادیر آیتم از مقایسه‌های "لست" استفاده می‌کند، به این معنی که رشته‌ای با مقدار صحیح برابر با یک عدد صحیح با همان مقدار در نظر گرفته می‌شود. از روشی برای فیلتر کردن با استفاده از مقایسه های "سخت" استفاده کنید containsStrict .

برای معکوس contains ، به روش doestContain مراجعه کنید .

containsOneItem()

این containsOneItem روش تعیین می کند که آیا مجموعه شامل یک آیتم واحد است یا خیر:

collect([])->containsOneItem();
 
// false
 
collect(['1'])->containsOneItem();
 
// true
 
collect(['1', '2'])->containsOneItem();
 
// false

containsStrict()

این روش دارای امضای مشابه contains روش است. با این حال، تمام مقادیر با استفاده از مقایسه "سخت" مقایسه می شوند.

رفتار این روش هنگام استفاده از Eloquent Collections اصلاح می شود .

count()

این count روش تعداد کل آیتم های مجموعه را برمی گرداند:

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

countBy()

این countBy روش تعداد مقادیر در مجموعه را شمارش می کند. به‌طور پیش‌فرض، این متد، وقوع هر عنصر را شمارش می‌کند و به شما امکان می‌دهد «انواع» خاصی از عناصر را در مجموعه بشمارید:

$collection = collect([1, 2, 2, 2, 3]);
 
$counted = $collection->countBy();
 
$counted->all();
 
// [1 => 1, 2 => 3, 3 => 1]

countBy برای شمارش همه موارد با یک مقدار سفارشی، یک بسته را به روش ارسال می کنید :

$collection = collect(['alice@gmail.com', 'bob@yahoo.com', 'carlos@gmail.com']);
 
$counted = $collection->countBy(function (string $email) {
return substr(strrchr($email, "@"), 1);
});
 
$counted->all();
 
// ['gmail.com' => 2, 'yahoo.com' => 1]

crossJoin()

متد crossJoin متقاطع مقادیر مجموعه را در میان آرایه ها یا مجموعه های داده شده می پیوندد و یک محصول دکارتی را با همه جایگشت های ممکن برمی گرداند:

$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 روش آیتم های مجموعه را تخلیه می کند و اجرای اسکریپت را پایان می دهد:

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

اگر نمی خواهید اجرای اسکریپت را متوقف کنید، dump به جای آن از روش استفاده کنید.

diff()

این diff روش مجموعه را با یک مجموعه دیگر یا یک PHP ساده array بر اساس مقادیر آن مقایسه می کند. این متد مقادیر موجود در مجموعه اصلی را که در مجموعه داده شده وجود ندارد برمی گرداند:

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

رفتار این روش هنگام استفاده از Eloquent Collections اصلاح می شود .

diffAssoc()

این diffAssoc روش مجموعه را با یک مجموعه دیگر یا یک PHP ساده array بر اساس کلیدها و مقادیر آن مقایسه می کند. این روش جفت‌های کلید/مقدار را در مجموعه اصلی که در مجموعه داده‌شده وجود ندارد، برمی‌گرداند:

$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]

diffAssocUsing()

بر خلاف diffAssoc , diffAssocUsing یک تابع تماس ارائه شده توسط کاربر را برای مقایسه شاخص ها می پذیرد:

$collection = collect([
'color' => 'orange',
'type' => 'fruit',
'remain' => 6,
]);
 
$diff = $collection->diffAssocUsing([
'Color' => 'yellow',
'Type' => 'fruit',
'Remain' => 3,
], 'strnatcasecmp');
 
$diff->all();
 
// ['color' => 'orange', 'remain' => 6]

فراخوانی باید تابع مقایسه ای باشد که عدد صحیح کمتر، مساوی یا بزرگتر از صفر را برمی گرداند. برای اطلاعات بیشتر، به مستندات PHP در مورد مراجعه کنید array_diff_uassoc ، که تابع PHP است که diffAssocUsing متد به صورت داخلی از آن استفاده می کند.

diffKeys()

این diffKeys روش مجموعه را با یک مجموعه دیگر یا یک PHP ساده array بر اساس کلیدهای آن مقایسه می کند. این روش جفت‌های کلید/مقدار را در مجموعه اصلی که در مجموعه داده‌شده وجود ندارد، برمی‌گرداند:

$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]

doesntContain()

این doesntContain روش تعیین می کند که آیا مجموعه شامل یک آیتم معین نیست یا خیر. می‌توانید doesntContain برای تعیین اینکه آیا عنصری در مجموعه وجود ندارد که با یک تست صدق داده شده مطابقت داشته باشد، یک بسته به روش ارسال کنید :

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

از طرف دیگر، می‌توانید رشته‌ای را به doesntContain متد ارسال کنید تا تعیین کنید که آیا مجموعه حاوی مقدار مورد مشخصی نیست یا خیر:

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

همچنین می‌توانید یک جفت کلید/مقدار را به doesntContain متد ارسال کنید، که تعیین می‌کند آیا جفت داده شده در مجموعه وجود ندارد:

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

این doesntContain روش هنگام بررسی مقادیر آیتم از مقایسه‌های "لست" استفاده می‌کند، به این معنی که رشته‌ای با مقدار صحیح برابر با یک عدد صحیح با همان مقدار در نظر گرفته می‌شود.

dot()

این dot روش یک مجموعه چند بعدی را به یک مجموعه سطح واحد مسطح می کند که از نماد "نقطه" برای نشان دادن عمق استفاده می کند:

$collection = collect(['products' => ['desk' => ['price' => 100]]]);
 
$flattened = $collection->dot();
 
$flattened->all();
 
// ['products.desk.price' => 100]

dump()

این dump روش آیتم های مجموعه را تخلیه می کند:

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

اگر می خواهید اجرای اسکریپت را پس از تخلیه مجموعه متوقف کنید، dd به جای آن از روش استفاده کنید.

duplicates()

متد duplicates مقادیر تکراری را از مجموعه بازیابی و برمی گرداند:

$collection = collect(['a', 'b', 'a', 'c', 'b']);
 
$collection->duplicates();
 
// [2 => 'a', 4 => 'b']

اگر مجموعه حاوی آرایه ها یا اشیاء باشد، می توانید کلید ویژگی هایی را که می خواهید برای مقادیر تکراری بررسی کنید، ارسال کنید:

$employees = collect([
['email' => 'abigail@example.com', 'position' => 'Developer'],
['email' => 'james@example.com', 'position' => 'Designer'],
['email' => 'victoria@example.com', 'position' => 'Developer'],
]);
 
$employees->duplicates('position');
 
// [2 => 'Developer']

duplicatesStrict()

این روش دارای امضای مشابه duplicates روش است. با این حال، تمام مقادیر با استفاده از مقایسه "سخت" مقایسه می شوند.

each()

متد each روی آیتم‌های مجموعه تکرار می‌شود و هر آیتم را به یک بسته منتقل می‌کند:

$collection = collect([1, 2, 3, 4]);
 
$collection->each(function (int $item, int $key) {
// ...
});

اگر می‌خواهید تکرار موارد را متوقف کنید، می‌توانید false از بسته شدن خود بازگردید:

$collection->each(function (int $item, int $key) {
if (/* condition */) {
return false;
}
});

eachSpread()

روش eachSpread بر روی آیتم های مجموعه تکرار می شود و هر مقدار مورد تودرتو را به فراخوانی داده شده ارسال می کند:

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

می‌توانید با بازگشت از پاسخ به تماس، تکرار را از طریق موارد متوقف کنید false :

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

ensure()

این ensure روش ممکن است برای تأیید اینکه همه عناصر یک مجموعه از یک نوع معین یا لیستی از انواع هستند استفاده شود. در غیر این صورت، یک UnexpectedValueException پرتاب می شود:

return $collection->ensure(User::class);
 
return $collection->ensure([User::class, Customer::class]);

انواع ابتدایی مانند string ،،،، و نیز ممکن است مشخص شوند : int float bool array

return $collection->ensure('int');

این ensure روش تضمین نمی کند که عناصری از انواع مختلف در زمان بعدی به مجموعه اضافه نشوند.

every()

این every روش ممکن است برای تأیید اینکه همه عناصر یک مجموعه از آزمون صدق معین عبور می کنند استفاده شود:

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

اگر مجموعه خالی باشد، every متد true برمی‌گرداند:

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

except()

متد except تمام موارد موجود در مجموعه را به جز مواردی که دارای کلیدهای مشخص شده هستند برمی گرداند:

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

برای معکوس except ، تنها روش را ببینید.

رفتار این روش هنگام استفاده از Eloquent Collections اصلاح می شود .

filter()

این filter روش مجموعه را با استفاده از فراخوانی داده شده فیلتر می کند و فقط مواردی را نگه می دارد که از آزمون صدق معین عبور می کنند:

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

اگر هیچ تماسی ارائه نشود، تمام ورودی‌های مجموعه که معادل هستند false حذف خواهند شد:

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

برای معکوس filter ، روش رد را ببینید .

first()

این first متد اولین عنصری را در مجموعه برمی‌گرداند که آزمون صدق داده شده را با موفقیت پشت سر می‌گذارد:

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

همچنین می توانید first متد را بدون آرگومان فراخوانی کنید تا اولین عنصر مجموعه را بدست آورید. اگر مجموعه خالی باشد، null برگردانده می شود:

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

firstOrFail()

روش firstOrFail مشابه first روش است. با این حال، اگر نتیجه ای یافت نشد، یک Illuminate\Support\ItemNotFoundException استثنا ایجاد می شود:

collect([1, 2, 3, 4])->firstOrFail(function (int $value, int $key) {
return $value > 5;
});
 
// Throws ItemNotFoundException...

همچنین می توانید firstOrFail متد را بدون آرگومان فراخوانی کنید تا اولین عنصر مجموعه را بدست آورید. اگر مجموعه خالی باشد، یک Illuminate\Support\ItemNotFoundException استثنا پرتاب می شود:

collect([])->firstOrFail();
 
// Throws ItemNotFoundException...

firstWhere()

متد firstWhere اولین عنصر مجموعه را با جفت کلید / مقدار داده شده برمی گرداند:

$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]

همچنین می توانید این firstWhere متد را با یک عملگر مقایسه فراخوانی کنید:

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

مانند متد Where ، می‌توانید یک آرگومان را به firstWhere متد ارسال کنید. در این سناریو، firstWhere متد اولین مورد را برمی‌گرداند که در آن مقدار کلید مورد داده‌شده «درست» است:

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

flatMap()

روش flatMap از طریق مجموعه تکرار می شود و هر مقدار را به بسته شدن داده شده ارسال می کند. بسته شدن برای اصلاح آیتم و بازگرداندن آن آزاد است، بنابراین مجموعه جدیدی از موارد اصلاح شده تشکیل می شود. سپس، آرایه با یک سطح صاف می شود:

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

flatten()

این flatten روش یک مجموعه چند بعدی را به یک بعد منفرد صاف می کند:

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

در صورت لزوم، می توانید به flatten روش یک آرگومان "depth" ارسال کنید:

$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'],
]
*/

در این مثال، فراخوانی flatten بدون ارائه عمق، آرایه‌های تودرتو را نیز مسطح می‌کرد و منجر به ['iPhone 6S', 'Apple', 'Galaxy S7', 'Samsung'] . ارائه عمق به شما امکان می دهد تعداد سطوحی که آرایه های تودرتو مسطح می شوند را مشخص کنید.

flip()

این flip روش کلیدهای مجموعه را با مقادیر متناظر آنها مبادله می کند:

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

forget()

این forget روش یک آیتم را با کلید خود از مجموعه حذف می کند:

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

برخلاف اکثر روش‌های جمع‌آوری دیگر، forget مجموعه اصلاح‌شده جدیدی را برمی‌گرداند. مجموعه ای را که فراخوانی می شود اصلاح می کند.

forPage()

این forPage روش یک مجموعه جدید حاوی مواردی را که در یک شماره صفحه مشخص وجود دارد، برمی گرداند. متد شماره صفحه را به عنوان اولین آرگومان خود و تعداد مواردی که در هر صفحه نشان می دهد به عنوان آرگومان دوم خود می پذیرد:

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

get()

متد get مورد را در یک کلید مشخص برمی گرداند. اگر کلید وجود نداشته باشد، null برگردانده می شود:

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

می توانید به صورت اختیاری یک مقدار پیش فرض را به عنوان آرگومان دوم ارسال کنید:

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

حتی ممکن است یک callback به عنوان مقدار پیش فرض روش ارسال کنید. اگر کلید مشخص شده وجود نداشته باشد، نتیجه تماس برگشتی برگردانده خواهد شد:

$collection->get('email', function () {
return 'taylor@example.com';
});
 
// taylor@example.com

groupBy()

این groupBy روش اقلام مجموعه را با یک کلید مشخص گروه بندی می کند:

$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->all();
 
/*
[
'account-x10' => [
['account_id' => 'account-x10', 'product' => 'Chair'],
['account_id' => 'account-x10', 'product' => 'Bookcase'],
],
'account-x11' => [
['account_id' => 'account-x11', 'product' => 'Desk'],
],
]
*/

به جای ارسال یک رشته key ، ممکن است یک تماس برگشتی ارسال کنید. تماس برگشتی باید مقداری را که می‌خواهید گروه را کلید بزنید، برگرداند:

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

معیارهای گروه بندی چندگانه ممکن است به عنوان یک آرایه ارسال شوند. هر عنصر آرایه به سطح مربوطه در یک آرایه چند بعدی اعمال می شود:

$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 (array $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 روش تعیین می کند که آیا یک کلید داده شده در مجموعه وجود دارد یا خیر:

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

hasAny()

این hasAny روش تعیین می کند که آیا هر یک از کلیدهای داده شده در مجموعه وجود دارد یا خیر:

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

implode()

این implode روش موارد را در یک مجموعه به هم می پیوندد. آرگومان های آن به نوع آیتم های مجموعه بستگی دارد. اگر مجموعه حاوی آرایه ها یا اشیاء است، باید کلید ویژگی هایی را که می خواهید به آنها بپیوندید، و رشته "چسب" را که می خواهید بین مقادیر قرار دهید، ارسال کنید:

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

اگر مجموعه شامل رشته‌های ساده یا مقادیر عددی است، باید " چسب" را به عنوان تنها آرگومان به متد ارسال کنید:

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

implode اگر بخواهید مقادیر در حال انقباض را قالب بندی کنید، می توانید یک بسته را برای متد ارسال کنید :

$collection->implode(function (array $item, int $key) {
return strtoupper($item['product']);
}, ', ');
 
// DESK, CHAIR

intersect()

این intersect روش هر مقداری را از مجموعه اصلی که در مجموعه داده شده array یا مجموعه وجود ندارد حذف می کند. مجموعه به دست آمده کلیدهای مجموعه اصلی را حفظ می کند:

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

رفتار این روش هنگام استفاده از Eloquent Collections اصلاح می شود .

intersectAssoc()

این intersectAssoc روش مجموعه اصلی را با مجموعه دیگری مقایسه می‌کند یا array جفت‌های کلید/مقدار موجود در همه مجموعه‌های داده شده را برمی‌گرداند:

$collection = collect([
'color' => 'red',
'size' => 'M',
'material' => 'cotton'
]);
 
$intersect = $collection->intersectAssoc([
'color' => 'blue',
'size' => 'M',
'material' => 'polyester'
]);
 
$intersect->all();
 
// ['size' => 'M']

intersectByKeys()

این intersectByKeys روش کلیدها و مقادیر مربوط به آنها را از مجموعه اصلی که در مجموعه داده array یا مجموعه وجود ندارد حذف می کند:

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

isEmpty()

اگر مجموعه خالی باشد متد isEmpty برمی گردد . true در غیر این صورت false بازگردانده می شود:

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

isNotEmpty()

اگر مجموعه خالی نباشد، متد isNotEmpty برمی گردد . true در غیر این صورت false بازگردانده می شود:

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

join()

این join متد مقادیر مجموعه را با یک رشته می پیوندد. با استفاده از آرگومان دوم این روش، می‌توانید نحوه اضافه شدن عنصر نهایی به رشته را نیز مشخص کنید:

collect(['a', 'b', 'c'])->join(', '); // 'a, b, c'
collect(['a', 'b', 'c'])->join(', ', ', and '); // 'a, b, and c'
collect(['a', 'b'])->join(', ', ' and '); // 'a and b'
collect(['a'])->join(', ', ' and '); // 'a'
collect([])->join(', ', ' and '); // ''

keyBy()

متد keyBy مجموعه را با کلید داده شده کلید می زند. اگر چندین مورد یک کلید داشته باشند، فقط آخرین مورد در مجموعه جدید ظاهر می شود:

$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'],
]
*/

همچنین می توانید یک تماس برگشتی به روش ارسال کنید. تماس برگشتی باید مقداری را برای کلید زدن مجموعه به صورت زیر برگرداند:

$keyed = $collection->keyBy(function (array $item, int $key) {
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 تمام کلیدهای مجموعه را برمی گرداند:

$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']

last()

این last متد آخرین عنصر مجموعه را که از آزمون صدق داده شده عبور می کند، برمی گرداند:

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

همچنین می توانید last متد را بدون آرگومان فراخوانی کنید تا آخرین عنصر مجموعه را بدست آورید. اگر مجموعه خالی باشد، null برگردانده می شود:

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

lazy()

این lazy روش یک نمونه جدید LazyCollection از آرایه زیرین آیتم ها را برمی گرداند:

$lazyCollection = collect([1, 2, 3, 4])->lazy();
 
$lazyCollection::class;
 
// Illuminate\Support\LazyCollection
 
$lazyCollection->all();
 
// [1, 2, 3, 4]

این به ویژه هنگامی مفید است که شما نیاز به انجام تغییرات در یک بزرگ Collection که شامل موارد زیادی است، می باشد:

$count = $hugeCollection
->lazy()
->where('country', 'FR')
->where('balance', '>', '100')
->count();

با تبدیل مجموعه به a LazyCollection ، از تخصیص یک تن حافظه اضافی اجتناب می کنیم. اگرچه مجموعه اصلی هنوز مقادیر خود را در حافظه نگه می دارد، فیلترهای بعدی این کار را نمی کنند. بنابراین، عملاً هیچ حافظه اضافی در هنگام فیلتر کردن نتایج مجموعه اختصاص نخواهد یافت.

macro()

متد static به شما امکان می دهد در زمان اجرا macro متدهایی را به کلاس اضافه کنید . برای اطلاعات بیشتر Collection به اسناد گسترش مجموعه ها مراجعه کنید.

make()

روش استاتیک make یک نمونه مجموعه جدید ایجاد می کند. به بخش ایجاد مجموعه ها مراجعه کنید .

map()

متد map از طریق مجموعه تکرار می شود و هر مقدار را به callback داده شده ارسال می کند. پاسخ به تماس برای اصلاح مورد و بازگرداندن آن آزاد است، بنابراین مجموعه جدیدی از موارد اصلاح شده تشکیل می شود:

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

مانند بسیاری از روش های جمع آوری دیگر، map یک نمونه مجموعه جدید را برمی گرداند. مجموعه ای را که فراخوانی می شود تغییر نمی دهد. اگر می خواهید مجموعه اصلی را تغییر دهید، از transform روش استفاده کنید.

mapInto()

متد mapInto() روی مجموعه تکرار می شود و با ارسال مقدار به سازنده یک نمونه جدید از کلاس داده شده ایجاد می کند:

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

mapSpread()

این mapSpread روش روی آیتم‌های مجموعه تکرار می‌شود و هر مقدار آیتم تودرتو را به بسته داده شده منتقل می‌کند. بسته شدن برای اصلاح آیتم و بازگرداندن آن آزاد است، بنابراین مجموعه جدیدی از موارد اصلاح شده تشکیل می شود:

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

mapToGroups()

این mapToGroups روش اقلام مجموعه را بر اساس بسته شدن داده شده گروه بندی می کند. بسته شدن باید یک آرایه انجمنی حاوی یک جفت کلید / مقدار را برگرداند، بنابراین مجموعه جدیدی از مقادیر گروه بندی شده را تشکیل می دهد:

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

mapWithKeys()

متد mapWithKeys از طریق مجموعه تکرار می شود و هر مقدار را به callback داده شده ارسال می کند. تماس برگشتی باید یک آرایه انجمنی حاوی یک جفت کلید / مقدار را برگرداند:

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

max()

متد max حداکثر مقدار یک کلید داده شده را برمی گرداند:

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

median()

متد مقدار میانه یک کلید داده شده را 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 آرایه یا مجموعه داده شده را با مجموعه اصلی ادغام می کند. اگر یک کلید رشته ای در آیتم های داده شده با کلید رشته ای در مجموعه اصلی مطابقت داشته باشد، مقدار مورد داده شده، مقدار موجود در مجموعه اصلی را بازنویسی می کند:

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

اگر کلیدهای مورد داده شده عددی باشند، مقادیر به انتهای مجموعه اضافه می شوند:

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

mergeRecursive()

این mergeRecursive روش آرایه یا مجموعه داده شده را به صورت بازگشتی با مجموعه اصلی ادغام می کند. اگر یک کلید رشته ای در آیتم های داده شده با کلید رشته ای در مجموعه اصلی مطابقت داشته باشد، آنگاه مقادیر این کلیدها با هم در یک آرایه ادغام می شوند و این به صورت بازگشتی انجام می شود:

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

min()

متد min حداقل مقدار یک کلید داده شده را برمی گرداند:

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

mode()

متد مقدار حالت یک کلید داده شده را mode برمی گرداند :

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

nth()

این nth روش یک مجموعه جدید متشکل از هر n-امین عنصر ایجاد می کند:

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

شما می توانید به صورت اختیاری یک افست شروع را به عنوان آرگومان دوم ارسال کنید:

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

only()

متد only موارد موجود در مجموعه را با کلیدهای مشخص شده برمی گرداند:

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

برای معکوس only ، به روش استثنا مراجعه کنید .

رفتار این روش هنگام استفاده از Eloquent Collections اصلاح می شود .

pad()

این pad روش آرایه را با مقدار داده شده پر می کند تا زمانی که آرایه به اندازه مشخص شده برسد. این روش مانند تابع array_pad PHP عمل می کند.

برای پد به سمت چپ، باید اندازه منفی را مشخص کنید. اگر قدر مطلق اندازه داده شده کمتر یا مساوی طول آرایه باشد، هیچ بالشتکی انجام نخواهد شد:

$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']

partition()

این partition روش ممکن است با تخریب آرایه PHP ترکیب شود تا عناصری را که آزمون صدق داده شده را از آنهایی که قبول نمی کنند، جدا کند:

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

percentage()

این percentage روش ممکن است برای تعیین سریع درصد موارد موجود در مجموعه که در آزمون صدق داده شده موفق شده اند استفاده شود:

$collection = collect([1, 1, 2, 2, 2, 3]);
 
$percentage = $collection->percentage(fn ($value) => $value === 1);
 
// 33.33

به طور پیش فرض، درصد به دو رقم اعشار گرد می شود. با این حال، می توانید این رفتار را با ارائه یک آرگومان دوم برای متد شخصی سازی کنید:

$percentage = $collection->percentage(fn ($value) => $value === 1, precision: 3);
 
// 33.333

pipe()

متد pipe مجموعه را به بسته شدن داده شده ارسال می کند و نتیجه بسته شدن اجرا شده را برمی گرداند:

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

pipeInto()

متد pipeInto یک نمونه جدید از کلاس داده شده ایجاد می کند و مجموعه را به سازنده ارسال می کند:

class ResourceCollection
{
/**
* Create a new ResourceCollection instance.
*/
public function __construct(
public Collection $collection,
) {}
}
 
$collection = collect([1, 2, 3]);
 
$resource = $collection->pipeInto(ResourceCollection::class);
 
$resource->collection->all();
 
// [1, 2, 3]

pipeThrough()

متد pipeThrough مجموعه را به آرایه بسته بندی داده شده ارسال می کند و نتیجه بسته های اجرا شده را برمی گرداند:

use Illuminate\Support\Collection;
 
$collection = collect([1, 2, 3]);
 
$result = $collection->pipeThrough([
function (Collection $collection) {
return $collection->merge([4, 5]);
},
function (Collection $collection) {
return $collection->sum();
},
]);
 
// 15

pluck()

متد pluck تمام مقادیر یک کلید داده شده را بازیابی می کند:

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

همچنین می‌توانید تعیین کنید که چگونه می‌خواهید مجموعه به دست آمده کلید شود:

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

این pluck روش همچنین از بازیابی مقادیر تو در تو با استفاده از نماد "نقطه" پشتیبانی می کند:

$collection = collect([
[
'name' => 'Laracon',
'speakers' => [
'first_day' => ['Rosa', 'Judith'],
],
],
[
'name' => 'VueConf',
'speakers' => [
'first_day' => ['Abigail', 'Joey'],
],
],
]);
 
$plucked = $collection->pluck('speakers.first_day');
 
$plucked->all();
 
// [['Rosa', 'Judith'], ['Abigail', 'Joey']]

اگر کلیدهای تکراری وجود داشته باشد، آخرین عنصر منطبق در مجموعه برداشته شده درج می شود:

$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 آخرین مورد را از مجموعه حذف و برمی گرداند:

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

pop برای حذف و برگرداندن چندین مورد از انتهای یک مجموعه، می توانید یک عدد صحیح به متد ارسال کنید :

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

prepend()

این prepend روش یک آیتم را به ابتدای مجموعه اضافه می کند:

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

همچنین می توانید یک آرگومان دوم را برای تعیین کلید آیتم از پیش تعیین شده ارسال کنید:

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

pull()

متد pull یک آیتم را با کلید خود از مجموعه حذف و برمی گرداند:

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

push()

این push روش یک مورد را به انتهای مجموعه اضافه می کند:

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

put()

متد put کلید و مقدار داده شده را در مجموعه تنظیم می کند:

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

random()

متد random یک آیتم تصادفی را از مجموعه برمی گرداند:

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

می توانید یک عدد صحیح را به آن ارسال کنید random تا مشخص کنید که چه تعداد آیتم را می خواهید به طور تصادفی بازیابی کنید. مجموعه ای از اقلام همیشه هنگام ارسال صریح تعداد مواردی که می خواهید دریافت کنید بازگردانده می شود:

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

اگر نمونه مجموعه موارد کمتری از درخواستی داشته باشد، random متد یک عدد را پرتاب می کند InvalidArgumentException .

این random روش همچنین یک بسته را می پذیرد که نمونه مجموعه فعلی را دریافت می کند:

use Illuminate\Support\Collection;
 
$random = $collection->random(fn (Collection $items) => min(10, count($items)));
 
$random->all();
 
// [1, 2, 3, 4, 5] - (retrieved randomly)

range()

متد range مجموعه ای حاوی اعداد صحیح بین محدوده مشخص شده را برمی گرداند:

$collection = collect()->range(3, 6);
 
$collection->all();
 
// [3, 4, 5, 6]

reduce()

این reduce روش مجموعه را به یک مقدار کاهش می دهد و نتیجه هر تکرار را به تکرار بعدی منتقل می کند:

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

مقدار برای $carry در اولین تکرار null ; با این حال، می توانید مقدار اولیه آن را با ارسال آرگومان دوم به reduce :

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

این reduce متد همچنین کلیدهای آرایه را در مجموعه های انجمنی به فراخوان داده شده ارسال می کند:

$collection = collect([
'usd' => 1400,
'gbp' => 1200,
'eur' => 1000,
]);
 
$ratio = [
'usd' => 1,
'gbp' => 1.37,
'eur' => 1.22,
];
 
$collection->reduce(function (int $carry, int $value, int $key) use ($ratio) {
return $carry + ($value * $ratio[$key]);
});
 
// 4264

reduceSpread()

این reduceSpread روش مجموعه را به آرایه ای از مقادیر کاهش می دهد و نتایج هر تکرار را به تکرار بعدی منتقل می کند. این روش مشابه reduce روش است. با این حال، می تواند چندین مقدار اولیه را بپذیرد:

[$creditsRemaining, $batch] = Image::where('status', 'unprocessed')
->get()
->reduceSpread(function (int $creditsRemaining, Collection $batch, Image $image) {
if ($creditsRemaining >= $image->creditsRequired()) {
$batch->push($image);
 
$creditsRemaining -= $image->creditsRequired();
}
 
return [$creditsRemaining, $batch];
}, $creditsAvailable, collect());

reject()

این reject روش مجموعه را با استفاده از بسته شدن داده شده فیلتر می کند. true اگر مورد باید از مجموعه حاصل حذف شود، بسته شدن باید برگردد :

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

برای معکوس روش reject ، روش را ببینید filter .

replace()

روش replace شبیه به merge ; با این حال، این روش علاوه بر بازنویسی موارد منطبق که دارای کلیدهای رشته ای هستند، replace مواردی را در مجموعه که دارای کلیدهای عددی منطبق هستند نیز بازنویسی می کند:

$collection = collect(['Taylor', 'Abigail', 'James']);
 
$replaced = $collection->replace([1 => 'Victoria', 3 => 'Finn']);
 
$replaced->all();
 
// ['Taylor', 'Victoria', 'James', 'Finn']

replaceRecursive()

این روش مانند کار می کند replace ، اما در آرایه ها تکرار می شود و همان فرآیند جایگزینی را برای مقادیر داخلی اعمال می کند:

$collection = collect([
'Taylor',
'Abigail',
[
'James',
'Victoria',
'Finn'
]
]);
 
$replaced = $collection->replaceRecursive([
'Charlie',
2 => [1 => 'King']
]);
 
$replaced->all();
 
// ['Charlie', 'Abigail', ['James', 'King', 'Finn']]

reverse()

این reverse روش ترتیب اقلام مجموعه را معکوس می کند و کلیدهای اصلی را حفظ می کند:

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

متد search مجموعه را برای مقدار داده شده جستجو می کند و در صورت یافتن کلید آن را برمی گرداند. اگر مورد پیدا نشد، false برگردانده می شود:

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

جستجو با استفاده از یک مقایسه "شل" انجام می شود، به این معنی که یک رشته با یک مقدار صحیح برابر با یک عدد صحیح با همان مقدار در نظر گرفته می شود. برای استفاده از مقایسه دقیق، true به عنوان آرگومان دوم به متد ارسال کنید:

collect([2, 4, 6, 8])->search('4', $strict = true);
 
// false

از طرف دیگر، می‌توانید برای جستجوی اولین موردی که در آزمون صدق داده شده موفق می‌شود، بسته خود را ارائه دهید:

collect([2, 4, 6, 8])->search(function (int $item, int $key) {
return $item > 5;
});
 
// 2

select()

این select متد کلیدهای داده شده را از مجموعه انتخاب می کند، شبیه به SELECT دستور SQL:

$users = collect([
['name' => 'Taylor Otwell', 'role' => 'Developer', 'status' => 'active'],
['name' => 'Victoria Faith', 'role' => 'Researcher', 'status' => 'active'],
]);
 
$users->select(['name', 'role']);
 
/*
[
['name' => 'Taylor Otwell', 'role' => 'Developer'],
['name' => 'Victoria Faith', 'role' => 'Researcher'],
],
*/

shift()

متد shift اولین مورد را از مجموعه حذف و برمی گرداند:

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

شما می توانید یک عدد صحیح به shift متد ارسال کنید تا چندین آیتم را از ابتدای مجموعه حذف و برگردانید:

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

shuffle()

این shuffle روش به طور تصادفی موارد موجود در مجموعه را با هم مخلوط می کند:

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

skip()

این skip روش یک مجموعه جدید را برمی‌گرداند، با تعداد معینی از عناصر حذف شده از ابتدای مجموعه:

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

skipUntil()

این skipUntil متد از روی آیتم‌های مجموعه می‌گذرد تا زمانی که بازخوانی داده شده بازگردد true و سپس موارد باقی‌مانده در مجموعه را به عنوان نمونه مجموعه جدید برمی‌گرداند:

$collection = collect([1, 2, 3, 4]);
 
$subset = $collection->skipUntil(function (int $item) {
return $item >= 3;
});
 
$subset->all();
 
// [3, 4]

همچنین می‌توانید یک مقدار ساده به skipUntil متد ارسال کنید تا از همه موارد پرش کنید تا مقدار داده شده پیدا شود:

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

اگر مقدار داده شده یافت نشد یا تماس برگشتی هرگز برنگردد true ، skipUntil متد یک مجموعه خالی برمی گرداند.

skipWhile()

این skipWhile روش از روی آیتم های مجموعه می گذرد در حالی که تماس داده شده برمی گردد true و سپس موارد باقی مانده در مجموعه را به عنوان یک مجموعه جدید برمی گرداند:

$collection = collect([1, 2, 3, 4]);
 
$subset = $collection->skipWhile(function (int $item) {
return $item <= 3;
});
 
$subset->all();
 
// [4]

اگر پاسخ تماس هرگز برنگردد false ، skipWhile متد یک مجموعه خالی را برمی گرداند.

slice()

این slice روش برشی از مجموعه را برمی‌گرداند که از شاخص داده شده شروع می‌شود:

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

اگر می خواهید اندازه برش برگشتی را محدود کنید، اندازه مورد نظر را به عنوان آرگومان دوم به متد ارسال کنید:

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

برش برگشتی کلیدها را به طور پیش فرض حفظ می کند. اگر نمی خواهید کلیدهای اصلی را حفظ کنید، می توانید از values روش برای فهرست مجدد آنها استفاده کنید.

sliding()

این sliding روش مجموعه جدیدی از تکه‌ها را برمی‌گرداند که نمای «پنجره کشویی» از موارد موجود در مجموعه را نشان می‌دهد:

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

این به ویژه در رابطه با eachSpread روش مفید است:

$transactions->sliding(2)->eachSpread(function (Collection $previous, Collection $current) {
$current->total = $previous->total + $current->amount;
});

می‌توانید به صورت اختیاری یک مقدار «گام» دوم را ارسال کنید، که فاصله بین اولین مورد از هر قطعه را تعیین می‌کند:

$collection = collect([1, 2, 3, 4, 5]);
 
$chunks = $collection->sliding(3, step: 2);
 
$chunks->toArray();
 
// [[1, 2, 3], [3, 4, 5]]

sole()

این sole روش اولین عنصری را در مجموعه برمی‌گرداند که آزمون صدق داده شده را با موفقیت پشت سر بگذارد، اما تنها در صورتی که آزمون حقیقت دقیقاً با یک عنصر مطابقت داشته باشد:

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

همچنین می‌توانید یک جفت کلید/مقدار را به sole متد ارسال کنید، که اولین عنصر در مجموعه را که با جفت داده شده مطابقت دارد، برمی‌گرداند، اما تنها در صورتی که دقیقاً یک عنصر مطابقت داشته باشد:

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

همچنین می‌توانید sole متد را بدون آرگومان فراخوانی کنید تا در صورت وجود تنها یک عنصر، اولین عنصر مجموعه را به دست آورید:

$collection = collect([
['product' => 'Desk', 'price' => 200],
]);
 
$collection->sole();
 
// ['product' => 'Desk', 'price' => 200]

اگر هیچ عنصری در مجموعه وجود نداشته باشد که باید توسط sole متد برگردانده شود، یک \Illuminate\Collections\ItemNotFoundException استثنا پرتاب می شود. اگر بیش از یک عنصر وجود داشته باشد که باید برگردانده شود، an \Illuminate\Collections\MultipleItemsFoundException پرتاب می شود.

some()

نام مستعار برای contains روش.

sort()

روش sort مجموعه را مرتب می کند. مجموعه مرتب شده کلیدهای آرایه اصلی را نگه می دارد، بنابراین در مثال زیر از values روش بازنشانی کلیدها به فهرست های شماره گذاری شده متوالی استفاده می کنیم:

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

اگر نیازهای مرتب‌سازی شما پیشرفته‌تر است، می‌توانید sort با الگوریتم خود یک تماس برگشتی را ارسال کنید. به مستندات PHP در مورد مراجعه کنید uasort ، چیزی که sort متد مجموعه از آن به صورت داخلی استفاده می کند.

اگر می‌خواهید مجموعه‌ای از آرایه‌ها یا اشیاء تودرتو را مرتب کنید، به sortBy و sortByDesc متدها مراجعه کنید.

sortBy()

متد sortBy مجموعه را بر اساس کلید داده شده مرتب می کند. مجموعه مرتب شده کلیدهای آرایه اصلی را نگه می دارد، بنابراین در مثال زیر از values روش بازنشانی کلیدها به فهرست های شماره گذاری شده متوالی استفاده می کنیم:

$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],
]
*/

متد پرچم های مرتب سازی را به عنوان آرگومان دوم خود sortBy می پذیرد :

$collection = collect([
['title' => 'Item 1'],
['title' => 'Item 12'],
['title' => 'Item 3'],
]);
 
$sorted = $collection->sortBy('title', SORT_NATURAL);
 
$sorted->values()->all();
 
/*
[
['title' => 'Item 1'],
['title' => 'Item 3'],
['title' => 'Item 12'],
]
*/

از طرف دیگر، می‌توانید بسته شدن خود را برای تعیین نحوه مرتب‌سازی مقادیر مجموعه بگذرانید:

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

اگر می خواهید مجموعه خود را بر اساس چندین ویژگی مرتب کنید، می توانید آرایه ای از عملیات مرتب سازی را به sortBy متد ارسال کنید. هر عملیات مرتب سازی باید آرایه ای متشکل از مشخصه ای باشد که می خواهید بر اساس آن مرتب سازی کنید و جهت مرتب سازی مورد نظر:

$collection = collect([
['name' => 'Taylor Otwell', 'age' => 34],
['name' => 'Abigail Otwell', 'age' => 30],
['name' => 'Taylor Otwell', 'age' => 36],
['name' => 'Abigail Otwell', 'age' => 32],
]);
 
$sorted = $collection->sortBy([
['name', 'asc'],
['age', 'desc'],
]);
 
$sorted->values()->all();
 
/*
[
['name' => 'Abigail Otwell', 'age' => 32],
['name' => 'Abigail Otwell', 'age' => 30],
['name' => 'Taylor Otwell', 'age' => 36],
['name' => 'Taylor Otwell', 'age' => 34],
]
*/

هنگام مرتب‌سازی یک مجموعه بر اساس چندین ویژگی، می‌توانید بسته‌هایی را نیز ارائه کنید که هر عملیات مرتب‌سازی را تعریف می‌کند:

$collection = collect([
['name' => 'Taylor Otwell', 'age' => 34],
['name' => 'Abigail Otwell', 'age' => 30],
['name' => 'Taylor Otwell', 'age' => 36],
['name' => 'Abigail Otwell', 'age' => 32],
]);
 
$sorted = $collection->sortBy([
fn (array $a, array $b) => $a['name'] <=> $b['name'],
fn (array $a, array $b) => $b['age'] <=> $a['age'],
]);
 
$sorted->values()->all();
 
/*
[
['name' => 'Abigail Otwell', 'age' => 32],
['name' => 'Abigail Otwell', 'age' => 30],
['name' => 'Taylor Otwell', 'age' => 36],
['name' => 'Taylor Otwell', 'age' => 34],
]
*/

sortByDesc()

این متد دارای امضای مشابه متد است sortBy ، اما مجموعه را به ترتیب مخالف مرتب می کند.

sortDesc()

این روش مجموعه را به ترتیب مخالف به عنوان sort روش مرتب می کند:

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

بر خلاف sort , شما ممکن است از یک بسته شدن عبور نکنید sortDesc . در عوض، باید از sort روش استفاده کنید و مقایسه خود را معکوس کنید.

sortKeys()

این sortKeys روش مجموعه را بر اساس کلیدهای آرایه انجمنی زیرین مرتب می کند:

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

sortKeysDesc()

این متد دارای امضای مشابه متد است sortKeys ، اما مجموعه را به ترتیب مخالف مرتب می کند.

sortKeysUsing()

این sortKeysUsing روش مجموعه را بر اساس کلیدهای آرایه انجمنی زیربنایی با استفاده از یک callback مرتب می کند:

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

فراخوانی باید تابع مقایسه ای باشد که عدد صحیح کمتر، مساوی یا بزرگتر از صفر را برمی گرداند. برای اطلاعات بیشتر، به مستندات PHP در مورد مراجعه کنید uksort ، که تابع PHP است که sortKeysUsing متد به صورت داخلی از آن استفاده می کند.

splice()

این splice متد تکه‌ای از آیتم‌ها را حذف می‌کند و برمی‌گرداند که با ایندکس مشخص شده شروع می‌شوند:

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

شما می توانید یک آرگومان دوم را برای محدود کردن اندازه مجموعه به دست آمده ارسال کنید:

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

علاوه بر این، می توانید یک آرگومان سوم حاوی موارد جدید را برای جایگزینی موارد حذف شده از مجموعه ارسال کنید:

$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 روش یک مجموعه را به تعداد معین گروه تقسیم می کند:

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

splitIn()

این splitIn روش یک مجموعه را به تعداد مشخصی از گروه ها تقسیم می کند و قبل از تخصیص بقیه به گروه نهایی، گروه های غیر پایانی را به طور کامل پر می کند:

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

sum()

متد sum مجموع همه موارد موجود در مجموعه را برمی گرداند:

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

اگر مجموعه حاوی آرایه ها یا اشیاء تو در تو باشد، باید کلیدی را ارسال کنید که برای تعیین اینکه کدام مقادیر باید جمع شوند استفاده می شود:

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

علاوه بر این، می‌توانید بسته شدن خود را برای تعیین اینکه کدام مقادیر مجموعه را جمع کنید، بگذرانید:

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

take()

متد take یک مجموعه جدید با تعداد مشخص شده از آیتم ها را برمی گرداند:

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

همچنین می توانید یک عدد صحیح منفی ارسال کنید تا تعداد مشخص شده از موارد را از انتهای مجموعه بردارید:

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

takeUntil()

متد takeUntil موارد را در مجموعه برمی‌گرداند تا زمانی که فراخوان داده شده بازگردد true :

$collection = collect([1, 2, 3, 4]);
 
$subset = $collection->takeUntil(function (int $item) {
return $item >= 3;
});
 
$subset->all();
 
// [1, 2]

همچنین می‌توانید یک مقدار ساده به takeUntil متد ارسال کنید تا آیتم‌ها را تا زمانی که مقدار داده شده پیدا شود، بدست آورید:

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

اگر مقدار داده شده یافت نشد یا تماس برگشتی هرگز برنگردد true ، takeUntil متد همه موارد موجود در مجموعه را برمی گرداند.

takeWhile()

متد takeWhile موارد را در مجموعه برمی‌گرداند تا زمانی که فراخوان داده شده بازگردد false :

$collection = collect([1, 2, 3, 4]);
 
$subset = $collection->takeWhile(function (int $item) {
return $item < 3;
});
 
$subset->all();
 
// [1, 2]

اگر پاسخ تماس هرگز برنگردد false ، takeWhile متد همه موارد موجود در مجموعه را برمی گرداند.

tap()

این tap روش مجموعه را به تماس داده شده ارسال می کند و به شما امکان می دهد در یک نقطه خاص به مجموعه ضربه بزنید و کاری با موارد انجام دهید در حالی که بر خود مجموعه تأثیری نمی گذارد. سپس مجموعه با tap روش زیر برگردانده می شود:

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

times()

روش استاتیک times یک مجموعه جدید را با فراخوانی بسته داده شده در تعداد مشخصی بار ایجاد می کند:

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

toArray()

این toArray روش مجموعه را به یک PHP ساده تبدیل می کند array . اگر مقادیر مجموعه مدل‌های Eloquent باشند ، مدل‌ها نیز به آرایه‌ها تبدیل می‌شوند:

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

toArray همچنین تمام اشیاء تودرتوی مجموعه را که نمونه ای از آن هستند Arrayable به یک آرایه تبدیل می کند. اگر می خواهید آرایه خام زیر مجموعه را دریافت کنید، all به جای آن از روش استفاده کنید.

toJson()

متد toJson مجموعه را به یک رشته سریالی JSON تبدیل می کند:

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

transform()

متد transform روی مجموعه تکرار می شود و با هر آیتم در مجموعه، فراخوانی داده شده را فراخوانی می کند. اقلام موجود در مجموعه با مقادیر برگشت داده شده توسط callback جایگزین می شوند:

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

بر خلاف بسیاری از روش های جمع آوری دیگر، transform خود مجموعه را اصلاح می کند. اگر می خواهید به جای آن یک مجموعه جدید ایجاد کنید، از map روش استفاده کنید.

undot()

این undot روش یک مجموعه تک بعدی را که از نماد "نقطه" استفاده می کند را به یک مجموعه چند بعدی گسترش می دهد:

$person = collect([
'name.first_name' => 'Marie',
'name.last_name' => 'Valentine',
'address.line_1' => '2992 Eagle Drive',
'address.line_2' => '',
'address.suburb' => 'Detroit',
'address.state' => 'MI',
'address.postcode' => '48219'
]);
 
$person = $person->undot();
 
$person->toArray();
 
/*
[
"name" => [
"first_name" => "Marie",
"last_name" => "Valentine",
],
"address" => [
"line_1" => "2992 Eagle Drive",
"line_2" => "",
"suburb" => "Detroit",
"state" => "MI",
"postcode" => "48219",
],
]
*/

union()

متد union آرایه داده شده را به مجموعه اضافه می کند. اگر آرایه داده شده حاوی کلیدهایی باشد که از قبل در مجموعه اصلی هستند، مقادیر مجموعه اصلی ترجیح داده می شوند:

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

unique()

این unique روش همه موارد منحصر به فرد مجموعه را برمی گرداند. مجموعه برگشتی کلیدهای آرایه اصلی را نگه می دارد، بنابراین در مثال زیر از values روش بازنشانی کلیدها به فهرست های شماره گذاری شده متوالی استفاده می کنیم:

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

هنگام برخورد با آرایه ها یا اشیاء تو در تو، می توانید کلید مورد استفاده برای تعیین منحصر به فرد بودن را مشخص کنید:

$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'],
]
*/

در نهایت، شما همچنین می توانید بسته شدن خود را به unique متد ارسال کنید تا مشخص کنید کدام مقدار باید منحصر به فرد بودن یک مورد را تعیین کند:

$unique = $collection->unique(function (array $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'],
]
*/

این unique روش هنگام بررسی مقادیر آیتم از مقایسه‌های "لست" استفاده می‌کند، به این معنی که رشته‌ای با مقدار صحیح برابر با یک عدد صحیح با همان مقدار در نظر گرفته می‌شود. از روشی برای فیلتر کردن با استفاده از مقایسه های "سخت" استفاده کنید uniqueStrict .

رفتار این روش هنگام استفاده از Eloquent Collections اصلاح می شود .

uniqueStrict()

این روش دارای امضای مشابه unique روش است. با این حال، تمام مقادیر با استفاده از مقایسه "سخت" مقایسه می شوند.

unless()

متد unless فراخوانی داده شده را اجرا می کند مگر اینکه اولین آرگومان داده شده به متد به صورت زیر ارزیابی شود true :

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

ممکن است یک فراخوان دوم به متد ارسال شود unless . دومین فراخوان زمانی اجرا می شود که اولین آرگومان داده شده به unless متد به صورت زیر ارزیابی شود true :

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

برای معکوس unless ، when روش را ببینید.

unlessEmpty()

نام مستعار برای whenNotEmpty روش.

unlessNotEmpty()

نام مستعار برای whenEmpty روش.

unwrap()

روش استاتیک unwrap موارد زیربنایی مجموعه را در صورت اعمال از مقدار داده شده برمی گرداند:

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

value()

این value روش یک مقدار داده شده را از اولین عنصر مجموعه بازیابی می کند:

$collection = collect([
['product' => 'Desk', 'price' => 200],
['product' => 'Speaker', 'price' => 400],
]);
 
$value = $collection->value('price');
 
// 200

values()

این values روش مجموعه جدیدی را با کلیدهای تنظیم مجدد به اعداد صحیح متوالی برمی گرداند:

$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 که اولین آرگومان داده شده به متد به true . نمونه مجموعه و اولین آرگومان ارائه شده به when متد به بسته شدن ارائه می شود:

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

ممکن است یک فراخوان دوم به متد ارسال شود when . دومین فراخوان زمانی اجرا می شود که اولین آرگومان داده شده به when متد به صورت زیر ارزیابی شود false :

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

برای معکوس when ، unless روش را ببینید.

whenEmpty()

این whenEmpty متد زمانی که مجموعه خالی باشد، فراخوانی داده شده را اجرا می کند:

$collection = collect(['Michael', 'Tom']);
 
$collection->whenEmpty(function (Collection $collection) {
return $collection->push('Adam');
});
 
$collection->all();
 
// ['Michael', 'Tom']
 
 
$collection = collect();
 
$collection->whenEmpty(function (Collection $collection) {
return $collection->push('Adam');
});
 
$collection->all();
 
// ['Adam']

بسته شدن دوم ممکن است به whenEmpty روشی منتقل شود که وقتی مجموعه خالی نباشد اجرا می شود:

$collection = collect(['Michael', 'Tom']);
 
$collection->whenEmpty(function (Collection $collection) {
return $collection->push('Adam');
}, function (Collection $collection) {
return $collection->push('Taylor');
});
 
$collection->all();
 
// ['Michael', 'Tom', 'Taylor']

برای معکوس whenEmpty ، whenNotEmpty روش را ببینید.

whenNotEmpty()

این whenNotEmpty متد زمانی که مجموعه خالی نباشد، فراخوانی داده شده را اجرا می کند:

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

بسته شدن دوم ممکن است به whenNotEmpty روشی منتقل شود که وقتی مجموعه خالی است اجرا می شود:

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

برای معکوس whenNotEmpty ، whenEmpty روش را ببینید.

where()

این where روش مجموعه را با یک جفت کلید / مقدار معین فیلتر می کند:

$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 روش هنگام بررسی مقادیر آیتم از مقایسه‌های "لست" استفاده می‌کند، به این معنی که رشته‌ای با مقدار صحیح برابر با یک عدد صحیح با همان مقدار در نظر گرفته می‌شود. از روشی برای فیلتر کردن با استفاده از مقایسه های "سخت" استفاده کنید whereStrict .

در صورت تمایل، می توانید یک عملگر مقایسه را به عنوان پارامتر دوم ارسال کنید. عملگرهای پشتیبانی شده عبارتند از: '==='، '!=='، '!='، '=='، '='، '<>'، '>'، '<'، '>='، و ' <=':

$collection = collect([
['name' => 'Jim', 'deleted_at' => '2019-01-01 00:00:00'],
['name' => 'Sally', 'deleted_at' => '2019-01-02 00:00:00'],
['name' => 'Sue', 'deleted_at' => null],
]);
 
$filtered = $collection->where('deleted_at', '!=', null);
 
$filtered->all();
 
/*
[
['name' => 'Jim', 'deleted_at' => '2019-01-01 00:00:00'],
['name' => 'Sally', 'deleted_at' => '2019-01-02 00:00:00'],
]
*/

whereStrict()

این روش دارای امضای مشابه where روش است. با این حال، تمام مقادیر با استفاده از مقایسه "سخت" مقایسه می شوند.

whereBetween()

این whereBetween روش مجموعه را با تعیین اینکه آیا مقدار مورد مشخص شده در محدوده معین قرار دارد یا خیر، فیلتر می کند:

$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 متد عناصری را از مجموعه حذف می کند که مقدار آیتم مشخصی که در آرایه داده شده موجود است ندارند:

$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' => 'Desk', 'price' => 200],
['product' => 'Bookcase', 'price' => 150],
]
*/

این whereIn روش هنگام بررسی مقادیر آیتم از مقایسه‌های "لست" استفاده می‌کند، به این معنی که رشته‌ای با مقدار صحیح برابر با یک عدد صحیح با همان مقدار در نظر گرفته می‌شود. از روشی برای فیلتر کردن با استفاده از مقایسه های "سخت" استفاده کنید whereInStrict .

whereInStrict()

این روش دارای امضای مشابه whereIn روش است. با این حال، تمام مقادیر با استفاده از مقایسه "سخت" مقایسه می شوند.

whereInstanceOf()

متد whereInstanceOf مجموعه را با یک نوع کلاس مشخص فیلتر می کند:

use App\Models\User;
use App\Models\Post;
 
$collection = collect([
new User,
new User,
new Post,
]);
 
$filtered = $collection->whereInstanceOf(User::class);
 
$filtered->all();
 
// [App\Models\User, App\Models\User]

whereNotBetween()

این whereNotBetween روش مجموعه را با تعیین اینکه آیا مقدار مورد مشخص شده خارج از محدوده معینی است یا خیر، فیلتر می کند:

$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 متد عناصری را از مجموعه حذف می کند که دارای مقدار آیتم مشخصی هستند که در آرایه داده شده موجود است:

$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 روش هنگام بررسی مقادیر آیتم از مقایسه‌های "لست" استفاده می‌کند، به این معنی که رشته‌ای با مقدار صحیح برابر با یک عدد صحیح با همان مقدار در نظر گرفته می‌شود. از روشی برای فیلتر کردن با استفاده از مقایسه های "سخت" استفاده کنید whereNotInStrict .

whereNotInStrict()

این روش دارای امضای مشابه whereNotIn روش است. با این حال، تمام مقادیر با استفاده از مقایسه "سخت" مقایسه می شوند.

whereNotNull()

متد whereNotNull مواردی را از مجموعه ای برمی گرداند که در آن کلید داده شده نیست null :

$collection = collect([
['name' => 'Desk'],
['name' => null],
['name' => 'Bookcase'],
]);
 
$filtered = $collection->whereNotNull('name');
 
$filtered->all();
 
/*
[
['name' => 'Desk'],
['name' => 'Bookcase'],
]
*/

whereNull()

متد whereNull مواردی را از مجموعه ای که کلید داده شده در آن است، برمی گرداند null :

$collection = collect([
['name' => 'Desk'],
['name' => null],
['name' => 'Bookcase'],
]);
 
$filtered = $collection->whereNull('name');
 
$filtered->all();
 
/*
[
['name' => null],
]
*/

wrap()

روش استاتیک wrap مقدار داده شده را در صورت امکان در یک مجموعه پیچیده می کند:

use Illuminate\Support\Collection;
 
$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 روش مقادیر آرایه داده شده را با مقادیر مجموعه اصلی در شاخص مربوطه خود با هم ادغام می کند:

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

پیام های سفارش بالاتر

مجموعه‌ها همچنین از «پیام‌های سفارش بالاتر» پشتیبانی می‌کنند، که میانبرهایی برای انجام اقدامات رایج در مجموعه‌ها هستند. روش های مجموعه ای که پیام های مرتبه بالاتر را ارائه می دهند عبارتند از : average , avg , contains , each , every , filter , first , , , , , , flatMap groupBy keyBy map max min partition reject skipUntil skipWhile some sortBy sortByDesc sum takeUntil takeWhile unique

هر پیام مرتبه بالاتر می تواند به عنوان یک ویژگی پویا در یک نمونه مجموعه قابل دسترسی باشد. به عنوان مثال، اجازه دهید از each پیام مرتبه بالاتر برای فراخوانی یک متد در هر شیء در یک مجموعه استفاده کنیم:

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

به همین ترتیب، ما می توانیم از sum پیام مرتبه بالاتر برای جمع آوری تعداد کل "رای" برای مجموعه ای از کاربران استفاده کنیم:

$users = User::where('group', 'Development')->get();
 
return $users->sum->votes;

مجموعه های تنبل

معرفی

قبل از اینکه درباره مجموعه‌های تنبل لاراول اطلاعات بیشتری کسب کنید، کمی وقت بگذارید تا با ژنراتورهای PHP آشنا شوید .

برای تکمیل Collection کلاس قدرتمند قبلی، کلاس از ژنراتورهای LazyCollection PHP استفاده می کند تا به شما امکان می دهد با مجموعه داده های بسیار بزرگ کار کنید و در عین حال مصرف حافظه را کم نگه دارید.

به عنوان مثال، تصور کنید برنامه شما نیاز به پردازش یک فایل لاگ چند گیگابایتی دارد در حالی که از روش های مجموعه لاراول برای تجزیه لاگ ها استفاده می کند. به جای خواندن یکباره کل فایل در حافظه، ممکن است از مجموعه‌های تنبل استفاده شود تا در یک زمان معین فقط بخش کوچکی از فایل را در حافظه نگه دارند:

use App\Models\LogEntry;
use Illuminate\Support\LazyCollection;
 
LazyCollection::make(function () {
$handle = fopen('log.txt', 'r');
 
while (($line = fgets($handle)) !== false) {
yield $line;
}
})->chunk(4)->map(function (array $lines) {
return LogEntry::fromLines($lines);
})->each(function (LogEntry $logEntry) {
// Process the log entry...
});

یا تصور کنید که باید از طریق 10000 مدل Eloquent تکرار کنید. هنگام استفاده از مجموعه های سنتی لاراول، همه 10000 مدل Eloquent باید به طور همزمان در حافظه بارگذاری شوند:

use App\Models\User;
 
$users = User::all()->filter(function (User $user) {
return $user->id > 500;
});

با این حال، متد سازنده پرس و جو cursor یک LazyCollection نمونه را برمی گرداند. این به شما این امکان را می دهد که همچنان فقط یک پرس و جو را در مقابل پایگاه داده اجرا کنید، اما تنها یک مدل Eloquent را در هر زمان در حافظه بارگذاری کنید. در این مثال، filter تماس برگشتی اجرا نمی‌شود تا زمانی که در واقع بر روی هر کاربر به‌صورت جداگانه تکرار کنیم و امکان کاهش شدید مصرف حافظه را فراهم کنیم:

use App\Models\User;
 
$users = User::cursor()->filter(function (User $user) {
return $user->id > 500;
});
 
foreach ($users as $user) {
echo $user->id;
}

ایجاد مجموعه های تنبل

برای ایجاد یک نمونه مجموعه تنبل، باید یک تابع مولد PHP را به متد مجموعه ارسال کنید make :

use Illuminate\Support\LazyCollection;
 
LazyCollection::make(function () {
$handle = fopen('log.txt', 'r');
 
while (($line = fgets($handle)) !== false) {
yield $line;
}
});

قرارداد قابل شمارش

تقریباً تمام متدهای موجود در Collection کلاس در کلاس نیز موجود هستند LazyCollection . هر دوی این کلاس ها Illuminate\Support\Enumerable قرارداد را پیاده سازی می کنند که روش های زیر را تعریف می کند:

همه میانگین میانگین تکه chunkWhile سقوط - فروپاشی جمع آوری کنید ترکیب کردن concat شامل شامل Strict شمردن شمارش توسط crossJoin DD تفاوت diffAssoc کلیدهای diff زباله تکراری duplicatesStrict هر یک هر گسترش هر بجز فیلتر کنید اولین firstOrFail اول کجا فلت مپ صاف کردن تلنگر برای صفحه گرفتن دسته بندی بر اساس دارد منفجر شدن تقاطع intersectAssoc intersectByKeys خالی است isNotEmpty است پیوستن کلید توسط کلیدها آخر کلان ساختن نقشه نقشه به mapSpread mapToGroups mapWithKeys حداکثر میانه ادغام mergeRecursive دقیقه حالت نهمین فقط پد تقسیم بندی لوله چیدن تصادفی كاهش دادن رد کردن جایگزین کردن جایگزین بازگشتی معکوس جستجو کردن بر زدن جست و خیز کردن تکه تنها مقداری مرتب سازی مرتب سازی بر اساس sortByDesc کلیدهای مرتب سازی sortKeysDesc شکاف مجموع گرفتن ضربه زدن بار به آرایه به جیسون اتحاد. اتصال منحصر بفرد منحصربفردStrict مگر اینکه مگر اینکه خالی باشد مگر اینکه خالی نباشد باز کردن ارزش های چه زمانی وقتی خالی WhenNotEmpty جایی که کجا سخت جایی که بین که در آن WhereInStrict WhereInstanceOf WhereNotBetween WhereNotIn WhereNotInStrict بسته بندی کردن زیپ

متدهایی که مجموعه را تغییر می دهند (مانند shift ، pop و prepend غیره) در کلاس موجود نیستند LazyCollection .

روش های مجموعه تنبل

علاوه بر متدهای تعریف شده در Enumerable قرارداد، LazyCollection کلاس شامل متدهای زیر است:

takeUntilTimeout()

متد takeUntilTimeout یک مجموعه تنبل جدید را برمی گرداند که مقادیر را تا زمان مشخص شده برمی شمارد. پس از آن زمان، مجموعه شمارش را متوقف خواهد کرد:

$lazyCollection = LazyCollection::times(INF)
->takeUntilTimeout(now()->addMinute());
 
$lazyCollection->each(function (int $number) {
dump($number);
 
sleep(1);
});
 
// 1
// 2
// ...
// 58
// 59

برای نشان دادن استفاده از این روش، برنامه ای را تصور کنید که فاکتورها را از پایگاه داده با استفاده از مکان نما ارسال می کند. می توانید یک کار برنامه ریزی شده تعریف کنید که هر 15 دقیقه اجرا می شود و فقط فاکتورها را حداکثر 14 دقیقه پردازش می کند:

use App\Models\Invoice;
use Illuminate\Support\Carbon;
 
Invoice::pending()->cursor()
->takeUntilTimeout(
Carbon::createFromTimestamp(LARAVEL_START)->add(14, 'minutes')
)
->each(fn (Invoice $invoice) => $invoice->submit());

tapEach()

در حالی که each متد فوراً تماس داده شده را برای هر آیتم در مجموعه فراخوانی می کند، tapEach متد تنها زمانی که آیتم ها یکی یکی از لیست خارج می شوند، پاسخ تماس داده شده را فراخوانی می کند:

// Nothing has been dumped so far...
$lazyCollection = LazyCollection::times(INF)->tapEach(function (int $value) {
dump($value);
});
 
// Three items are dumped...
$array = $lazyCollection->take(3)->all();
 
// 1
// 2
// 3

remember()

این remember متد یک مجموعه تنبل جدید را برمی‌گرداند که مقادیری را که قبلاً شمارش شده‌اند به خاطر می‌آورد و در شمارش‌های مجموعه بعدی دوباره آنها را بازیابی نمی‌کند:

// No query has been executed yet...
$users = User::cursor()->remember();
 
// The query is executed...
// The first 5 users are hydrated from the database...
$users->take(5)->all();
 
// First 5 users come from the collection's cache...
// The rest are hydrated from the database...
$users->take(20)->all();