مجموعه ها
معرفی
این
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()
متد
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();