مجموعه ها
معرفی
این
Illuminate\Support\Collection
کلاس یک پوشش روان و راحت برای کار با آرایه های داده ارائه می دهد.
برای مثال کد زیر را بررسی کنید.
ما از
collect
کمک کننده برای ایجاد یک نمونه مجموعه جدید از آرایه استفاده می کنیم،
strtoupper
تابع را روی هر عنصر اجرا می کنیم و سپس همه عناصر خالی را حذف می کنیم:
$collection = collect(['taylor', 'abigail', null])->map(function ($name) { return strtoupper($name);})->reject(function ($name) { return empty($name);});
همانطور که می بینید،
Collection
کلاس به شما اجازه می دهد تا متدهای خود را برای انجام نگاشت روان و کاهش
آرایه زیرین زنجیره بزنید.
به طور کلی، مجموعه ها تغییر ناپذیر هستند، به این معنی که هر
Collection
روش یک نمونه کاملاً جدید را برمی گرداند
Collection
.
ایجاد مجموعه ها
همانطور که در بالا ذکر شد،
collect
کمک کننده یک نمونه جدید
Illuminate\Support\Collection
برای آرایه داده شده برمی گرداند.
بنابراین، ایجاد یک مجموعه به همین سادگی است:
$collection = collect([1, 2, 3]);
نتایج جستجوهای Eloquent همیشه به عنوان
Collection
نمونه برگردانده می شوند.
گسترش مجموعه ها
مجموعه ها "macroable" هستند، که به شما امکان می دهد روش های اضافی را
Collection
در زمان اجرا به کلاس اضافه کنید.
به عنوان مثال، کد زیر یک
toUpper
متد را به
Collection
کلاس اضافه می کند:
use Illuminate\Support\Collection;use Illuminate\Support\Str; Collection::macro('toUpper', function () { return $this->map(function ($value) { return Str::upper($value); });}); $collection = collect(['first', 'second']); $upper = $collection->toUpper(); // ['FIRST', 'SECOND']
به طور معمول، شما باید ماکروهای مجموعه را در یک ارائه دهنده خدمات اعلام کنید .
روش های موجود
برای بقیه این مستندات، در مورد هر روش موجود در
Collection
کلاس بحث خواهیم کرد.
به یاد داشته باشید، همه این روش ها ممکن است برای دستکاری روان آرایه زیرین
زنجیره شوند.
علاوه بر این، تقریباً هر روش یک
Collection
نمونه جدید را برمی گرداند و به شما امکان می دهد در صورت لزوم نسخه اصلی
مجموعه را حفظ کنید:
همه میانگین میانگین تکه سقوط - فروپاشی جمع آوری کنید ترکیب کردن concat شامل شامل Strict شمردن شمارش توسط crossJoin DD تفاوت diffAssoc کلیدهای diff زباله تکراری duplicatesStrict هر یک هر گسترش هر بجز فیلتر اولین اول کجا فلت مپ صاف کردن تلنگر فراموش کردن برای صفحه گرفتن دسته بندی بر اساس دارد منفجر شدن تقاطع intersectByKeys خالی است isNotEmpty است پیوستن کلید توسط کلیدها آخر کلان ساختن نقشه نقشه به mapSpread mapToGroups mapWithKeys حداکثر میانه ادغام mergeRecursive دقیقه حالت نهمین فقط پد تقسیم بندی لوله چیدن ترکیدن پیش انداختن کشیدن فشار دادن قرار دادن تصادفی كاهش دادن رد کردن جایگزین کردن جایگزین بازگشتی معکوس جستجو کردن تغییر مکان بر زدن جست و خیز کردن skipUntil skipWhile تکه مقداری مرتب سازی مرتب سازی بر اساس sortByDesc sortDesc کلیدهای مرتب سازی sortKeysDesc اتصال شکاف مجموع گرفتن بگیر تا takeWhile ضربه زدن بار به آرایه به جیسون تبدیل اتحاد. اتصال منحصر بفرد منحصربفرد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->toArray(); // [[1, 2, 3, 4], [5, 6, 7]]
این روش به ویژه در نماها هنگام کار با یک سیستم شبکه مانند Bootstrap مفید است . تصور کنید مجموعه ای از مدل های Eloquent دارید که می خواهید در یک شبکه نمایش دهید:
@foreach ($products->chunk(3) as $chunk) <div class="row"> @foreach ($chunk as $product) <div class="col-xs-4">{{ $product->name }}</div> @endforeach </div>@endforeach
collapse()
این
collapse
روش مجموعه ای از آرایه ها را به یک مجموعه واحد و مسطح جمع می کند:
$collection = collect([[1, 2, 3], [4, 5, 6], [7, 8, 9]]); $collapsed = $collection->collapse(); $collapsed->all(); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
combine()
این
combine
روش مقادیر مجموعه را به عنوان کلید با مقادیر آرایه یا مجموعه دیگری ترکیب
می کند:
$collection = collect(['name', 'age']); $combined = $collection->combine(['George', 29]); $combined->all(); // ['name' => 'George', 'age' => 29]
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(); get_class($collection); // 'Illuminate\Support\Collection' $collection->all(); // [1, 2, 3]
این
collect
روش مخصوصاً زمانی مفید است که شما یک نمونه ازEnumerable
مجموعه غیر تنبل دارید و نیاز دارید. از آنجایی کهcollect()
بخشی ازEnumerable
قرارداد است، می توانید با خیال راحت از آن برای دریافتCollection
نمونه استفاده کنید.
concat()
این
concat
روش مقادیر داده شده
array
یا مجموعه را به انتهای مجموعه اضافه می کند:
$collection = collect(['John Doe']); $concatenated = $collection->concat(['Jane Doe'])->concat(['name' => 'Johnny Doe']); $concatenated->all(); // ['John Doe', 'Jane Doe', 'Johnny Doe']
contains()
این
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
برای انجام تست حقیقت خود، یک فراخوان به روش ارسال کنید:
$collection = collect([1, 2, 3, 4, 5]); $collection->contains(function ($value, $key) { return $value > 5;}); // false
این
contains
روش هنگام بررسی مقادیر آیتم از مقایسههای "لست" استفاده میکند، به این
معنی که رشتهای با مقدار صحیح برابر با یک عدد صحیح با همان مقدار در نظر گرفته میشود.
از روشی برای فیلتر کردن با استفاده از مقایسه های "سخت" استفاده کنید
containsStrict
.
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]
با این حال، شما یک callback به
countBy
روش ارسال می کنید تا همه موارد را با یک مقدار سفارشی شمارش کنید:
$collection = collect(['alice@gmail.com', 'bob@yahoo.com', 'carlos@gmail.com']); $counted = $collection->countBy(function ($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]
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]
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->each(function ($item, $key) { //});
اگر میخواهید تکرار موارد را متوقف کنید، میتوانید
false
از پاسخ به تماس خود بازگردید:
$collection->each(function ($item, $key) { if (/* some condition */) { return false; }});
eachSpread()
روش
eachSpread
بر روی آیتم های مجموعه تکرار می شود و هر مقدار مورد تودرتو را به فراخوانی
داده شده ارسال می کند:
$collection = collect([['John Doe', 35], ['Jane Doe', 33]]); $collection->eachSpread(function ($name, $age) { //});
میتوانید با بازگشت از پاسخ به تماس، تکرار را از طریق موارد متوقف کنید
false
:
$collection->eachSpread(function ($name, $age) { return false;});
every()
این
every
روش ممکن است برای تأیید اینکه همه عناصر یک مجموعه از آزمون صدق معین عبور
می کنند استفاده شود:
collect([1, 2, 3, 4])->every(function ($value, $key) { return $value > 2;}); // false
اگر مجموعه خالی باشد،
every
true برمی گردد:
$collection = collect([]); $collection->every(function ($value, $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 ($value, $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 ($value, $key) { return $value > 2;}); // 3
همچنین می توانید
first
متد را بدون آرگومان فراخوانی کنید تا اولین عنصر مجموعه را بدست آورید.
اگر مجموعه خالی باشد،
null
برگردانده می شود:
collect([1, 2, 3, 4])->first(); // 1
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
از طریق مجموعه تکرار می شود و هر مقدار را به callback داده شده ارسال می
کند.
بازخوانی برای اصلاح آیتم و بازگرداندن آن آزاد است، بنابراین مجموعه جدیدی
از آیتم های اصلاح شده تشکیل می شود.
سپس، آرایه با یک سطح صاف می شود:
$collection = collect([ ['name' => 'Sally'], ['school' => 'Arkansas'], ['age' => 28]]); $flattened = $collection->flatMap(function ($values) { return array_map('strtoupper', $values);}); $flattened->all(); // ['name' => 'SALLY', 'school' => 'ARKANSAS', 'age' => '28'];
flatten()
این
flatten
روش یک مجموعه چند بعدی را به یک بعد منفرد صاف می کند:
$collection = collect(['name' => 'taylor', 'languages' => ['php', 'javascript']]); $flattened = $collection->flatten(); $flattened->all(); // ['taylor', 'php', 'javascript'];
شما می توانید به صورت اختیاری تابع را آرگومان "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('foo', 'default-value'); // default-value
حتی ممکن است یک callback را به عنوان مقدار پیش فرض ارسال کنید. اگر کلید مشخص شده وجود نداشته باشد، نتیجه تماس برگشتی برگردانده خواهد شد:
$collection->get('email', function () { return 'default-value';}); // default-value
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->toArray(); /* [ '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 ($item, $key) { return substr($item['account_id'], -3);}); $grouped->toArray(); /* [ 'x10' => [ ['account_id' => 'account-x10', 'product' => 'Chair'], ['account_id' => 'account-x10', 'product' => 'Bookcase'], ], 'x11' => [ ['account_id' => 'account-x11', 'product' => 'Desk'], ], ]*/
معیارهای گروه بندی چندگانه ممکن است به عنوان یک آرایه ارسال شوند. هر عنصر آرایه به سطح مربوطه در یک آرایه چند بعدی اعمال می شود:
$data = new Collection([ 10 => ['user' => 1, 'skill' => 1, 'roles' => ['Role_1', 'Role_3']], 20 => ['user' => 2, 'skill' => 1, 'roles' => ['Role_1', 'Role_2']], 30 => ['user' => 3, 'skill' => 2, 'roles' => ['Role_1']], 40 => ['user' => 4, 'skill' => 2, 'roles' => ['Role_2']],]); $result = $data->groupBy([ 'skill', function ($item) { return $item['roles']; },], $preserveKeys = true); /*[ 1 => [ 'Role_1' => [ 10 => ['user' => 1, 'skill' => 1, 'roles' => ['Role_1', 'Role_3']], 20 => ['user' => 2, 'skill' => 1, 'roles' => ['Role_1', 'Role_2']], ], 'Role_2' => [ 20 => ['user' => 2, 'skill' => 1, 'roles' => ['Role_1', 'Role_2']], ], 'Role_3' => [ 10 => ['user' => 1, 'skill' => 1, 'roles' => ['Role_1', 'Role_3']], ], ], 2 => [ 'Role_1' => [ 30 => ['user' => 3, 'skill' => 2, 'roles' => ['Role_1']], ], 'Role_2' => [ 40 => ['user' => 4, 'skill' => 2, 'roles' => ['Role_2']], ], ],];*/
has()
این
has
روش تعیین می کند که آیا یک کلید داده شده در مجموعه وجود دارد یا خیر:
$collection = collect(['account_id' => 1, 'product' => 'Desk', 'amount' => 5]); $collection->has('product'); // true $collection->has(['product', 'amount']); // true $collection->has(['amount', 'price']); // false
implode()
این
implode
روش موارد را در یک مجموعه به هم می پیوندد.
آرگومان های آن به نوع آیتم های مجموعه بستگی دارد.
اگر مجموعه حاوی آرایه ها یا اشیاء است، باید کلید ویژگی هایی را که می
خواهید به آنها بپیوندید، و رشته "چسب" را که می خواهید بین مقادیر قرار دهید ارسال کنید:
$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'
intersect()
این
intersect
روش هر مقداری را از مجموعه اصلی که در مجموعه داده شده
array
یا مجموعه وجود ندارد حذف می کند.
مجموعه به دست آمده کلیدهای مجموعه اصلی را حفظ می کند:
$collection = collect(['Desk', 'Sofa', 'Chair']); $intersect = $collection->intersect(['Desk', 'Chair', 'Bookcase']); $intersect->all(); // [0 => 'Desk', 2 => 'Chair']
رفتار این روش هنگام استفاده از Eloquent Collections اصلاح می شود .
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 ($item) { return strtoupper($item['product_id']);}); $keyed->all(); /* [ 'PROD-100' => ['product_id' => 'prod-100', 'name' => 'Desk'], 'PROD-200' => ['product_id' => 'prod-200', 'name' => 'Chair'], ]*/
keys()
متد
keys
تمام کلیدهای مجموعه را برمی گرداند:
$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 ($value, $key) { return $value < 3;}); // 2
همچنین می توانید
last
متد را بدون آرگومان فراخوانی کنید تا آخرین عنصر مجموعه را بدست آورید.
اگر مجموعه خالی باشد،
null
برگردانده می شود:
collect([1, 2, 3, 4])->last(); // 4
macro()
متد static به شما امکان می دهد
در زمان اجرا
macro
متدهایی را به کلاس اضافه کنید .
برای اطلاعات بیشتر
Collection
به اسناد
گسترش مجموعه ها مراجعه کنید.
make()
روش استاتیک
make
یک نمونه مجموعه جدید ایجاد می کند.
به بخش ایجاد مجموعه ها
مراجعه کنید
.
map()
متد
map
از طریق مجموعه تکرار می شود و هر مقدار را به callback داده شده ارسال می
کند.
پاسخ به تماس برای اصلاح مورد و بازگرداندن آن آزاد است، بنابراین مجموعه
جدیدی از موارد اصلاح شده تشکیل می شود:
$collection = collect([1, 2, 3, 4, 5]); $multiplied = $collection->map(function ($item, $key) { return $item * 2;}); $multiplied->all(); // [2, 4, 6, 8, 10]
مانند بسیاری از روش های جمع آوری دیگر،
map
یک نمونه مجموعه جدید را برمی گرداند. مجموعه ای را که فراخوانی می شود تغییر نمی دهد. اگر می خواهید مجموعه اصلی را تغییر دهید، ازtransform
روش استفاده کنید.
mapInto()
متد
mapInto()
روی مجموعه تکرار می شود و با ارسال مقدار به سازنده یک نمونه جدید از کلاس
داده شده ایجاد می کند:
class Currency{ /** * Create a new currency instance. * * @param string $code * @return void */ function __construct(string $code) { $this->code = $code; }} $collection = collect(['USD', 'EUR', 'GBP']); $currencies = $collection->mapInto(Currency::class); $currencies->all(); // [Currency('USD'), Currency('EUR'), Currency('GBP')]
mapSpread()
این
mapSpread
روش روی آیتمهای مجموعه تکرار میشود و هر مقدار مورد تودرتو را به
فراخوانی داده شده ارسال میکند.
پاسخ به تماس برای اصلاح مورد و بازگرداندن آن آزاد است، بنابراین مجموعه
جدیدی از موارد اصلاح شده تشکیل می شود:
$collection = collect([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); $chunks = $collection->chunk(2); $sequence = $chunks->mapSpread(function ($even, $odd) { return $even + $odd;}); $sequence->all(); // [1, 5, 9, 13, 17]
mapToGroups()
این
mapToGroups
روش اقلام مجموعه را بر اساس تماس داده شده گروه بندی می کند.
فراخوانی باید یک آرایه انجمنی حاوی یک جفت کلید / مقدار را برگرداند،
بنابراین مجموعه جدیدی از مقادیر گروه بندی شده را تشکیل می دهد:
$collection = collect([ [ 'name' => 'John Doe', 'department' => 'Sales', ], [ 'name' => 'Jane Doe', 'department' => 'Sales', ], [ 'name' => 'Johnny Doe', 'department' => 'Marketing', ]]); $grouped = $collection->mapToGroups(function ($item, $key) { return [$item['department'] => $item['name']];}); $grouped->toArray(); /* [ 'Sales' => ['John Doe', 'Jane Doe'], 'Marketing' => ['Johnny Doe'], ]*/ $grouped->get('Sales')->all(); // ['John Doe', 'Jane Doe']
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 ($item) { 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]
nth()
این
nth
روش یک مجموعه جدید متشکل از هر n-امین عنصر ایجاد می کند:
$collection = collect(['a', 'b', 'c', 'd', 'e', 'f']); $collection->nth(4); // ['a', 'e']
شما می توانید به صورت اختیاری یک offset را به عنوان آرگومان دوم ارسال کنید:
$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 ترکیب شود
list
تا عناصری را که تست صدق داده شده را از آنهایی که قبول نمی کنند، جدا کند:
$collection = collect([1, 2, 3, 4, 5, 6]); list($underThree, $equalOrAboveThree) = $collection->partition(function ($i) { return $i < 3;}); $underThree->all(); // [1, 2] $equalOrAboveThree->all(); // [3, 4, 5, 6]
pipe()
متد
pipe
مجموعه را به callback داده شده ارسال می کند و نتیجه را برمی گرداند:
$collection = collect([1, 2, 3]); $piped = $collection->pipe(function ($collection) { return $collection->sum();}); // 6
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([ [ 'speakers' => [ 'first_day' => ['Rosa', 'Judith'], 'second_day' => ['Angela', 'Kathleen'], ], ],]); $plucked = $collection->pluck('speakers.first_day'); $plucked->all(); // ['Rosa', 'Judith']
اگر کلیدهای تکراری وجود داشته باشد، آخرین عنصر منطبق در مجموعه برداشته شده درج می شود:
$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]
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)
اگر مجموعه موارد کمتر از درخواستی داشته باشد، متد یک عدد را پرتاب می کند
InvalidArgumentException
.
reduce()
این
reduce
روش مجموعه را به یک مقدار کاهش می دهد و نتیجه هر تکرار را به تکرار بعدی
منتقل می کند:
$collection = collect([1, 2, 3]); $total = $collection->reduce(function ($carry, $item) { return $carry + $item;}); // 6
مقدار برای
$carry
در اولین تکرار
null
;
با این حال، می توانید مقدار اولیه آن را با ارسال آرگومان دوم به
reduce
:
$collection->reduce(function ($carry, $item) { return $carry + $item;}, 4); // 10
reject()
این
reject
روش مجموعه را با استفاده از پاسخ تماس داده شده فیلتر می کند.
true
اگر مورد باید از مجموعه حاصل حذف شود،
تماس برگشتی باید برگردد :
$collection = collect([1, 2, 3, 4]); $filtered = $collection->reject(function ($value, $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
به عنوان آرگومان دوم به متد ارسال کنید:
$collection->search('4', true); // false
از طرف دیگر، میتوانید برای جستجوی اولین موردی که آزمون صدق شما را با موفقیت پشت سر میگذارد، پاسخ تماس خود را انجام دهید:
$collection->search(function ($item, $key) { return $item > 5;}); // 2
shift()
متد
shift
اولین مورد را از مجموعه حذف و برمی گرداند:
$collection = collect([1, 2, 3, 4, 5]); $collection->shift(); // 1 $collection->all(); // [2, 3, 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 ($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 ($item) { return $item <= 3;}); $subset->all(); // [4]
اگر پاسخ تماس هرگز برنگردد
true
،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
روش برای فهرست مجدد آنها استفاده کنید.
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], ]*/
همچنین می توانید برای تعیین نحوه مرتب سازی مقادیر مجموعه، پاسخ تماس خود را ارسال کنید:
$collection = collect([ ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']], ['name' => 'Chair', 'colors' => ['Black']], ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],]); $sorted = $collection->sortBy(function ($product, $key) { return count($product['colors']);}); $sorted->values()->all(); /* [ ['name' => 'Chair', 'colors' => ['Black']], ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']], ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']], ]*/
sortByDesc()
این متد دارای امضای مشابه متد است
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
، اما مجموعه را به ترتیب مخالف مرتب می کند.
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->toArray(); // [[1, 2], [3, 4], [5]]
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 ($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 ($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 ($item) { return $item < 3;}); $subset->all(); // [1, 2]
اگر پاسخ تماس هرگز برنگردد
false
،takeWhile
متد همه موارد موجود در مجموعه را برمی گرداند.
tap()
این
tap
روش مجموعه را به تماس داده شده ارسال می کند، و به شما امکان می دهد در یک
نقطه خاص به مجموعه ضربه بزنید و کاری با موارد انجام دهید در حالی که بر خود مجموعه تأثیر نمی گذارد:
collect([2, 4, 3, 1, 5]) ->sort() ->tap(function ($collection) { Log::debug('Values after sorting', $collection->values()->toArray()); }) ->shift(); // 1
times()
روش استاتیک
times
یک مجموعه جدید را با فراخوانی callback چند بار ایجاد می کند:
$collection = Collection::times(10, function ($number) { return $number * 9;}); $collection->all(); // [9, 18, 27, 36, 45, 54, 63, 72, 81, 90]
این روش زمانی می تواند مفید باشد که با کارخانه ها برای ایجاد مدل های Eloquent ترکیب شود :
$categories = Collection::times(3, function ($number) { return factory(Category::class)->create(['name' => "Category No. $number"]);}); $categories->all(); /* [ ['id' => 1, 'name' => 'Category No. 1'], ['id' => 2, 'name' => 'Category No. 2'], ['id' => 3, 'name' => 'Category No. 3'], ]*/
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 ($item, $key) { return $item * 2;}); $collection->all(); // [2, 4, 6, 8, 10]
بر خلاف بسیاری از روش های جمع آوری دیگر،
transform
خود مجموعه را اصلاح می کند. اگر می خواهید به جای آن یک مجموعه جدید ایجاد کنید، ازmap
روش استفاده کنید.
union()
متد
union
آرایه داده شده را به مجموعه اضافه می کند.
اگر آرایه داده شده حاوی کلیدهایی باشد که از قبل در مجموعه اصلی هستند،
مقادیر مجموعه اصلی ترجیح داده می شوند:
$collection = collect([1 => ['a'], 2 => ['b']]); $union = $collection->union([3 => ['c'], 1 => ['b']]); $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 = $collection->unique(function ($item) { return $item['brand'].$item['type'];}); $unique->values()->all(); /* [ ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'], ['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'], ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'], ['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'], ]*/
این
unique
روش هنگام بررسی مقادیر آیتم از مقایسههای "لست" استفاده میکند، به این
معنی که رشتهای با مقدار صحیح برابر با یک عدد صحیح با همان مقدار در نظر گرفته میشود.
از روشی برای فیلتر کردن با استفاده از مقایسه های "سخت" استفاده کنید
uniqueStrict
.
رفتار این روش هنگام استفاده از Eloquent Collections اصلاح می شود .
uniqueStrict()
این روش دارای امضای مشابه
unique
روش است.
با این حال، تمام مقادیر با استفاده از مقایسه "سخت" مقایسه می شوند.
unless()
متد
unless
فراخوانی داده شده را اجرا می کند مگر اینکه اولین آرگومان داده شده به متد
به صورت زیر ارزیابی شود
true
:
$collection = collect([1, 2, 3]); $collection->unless(true, function ($collection) { return $collection->push(4);}); $collection->unless(false, function ($collection) { return $collection->push(5);}); $collection->all(); // [1, 2, 3, 5]
برای معکوس
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'
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
:
$collection = collect([1, 2, 3]); $collection->when(true, function ($collection) { return $collection->push(4);}); $collection->when(false, function ($collection) { return $collection->push(5);}); $collection->all(); // [1, 2, 3, 4]
برای معکوس
when
،
unless
روش را ببینید.
whenEmpty()
این
whenEmpty
متد زمانی که مجموعه خالی باشد، فراخوانی داده شده را اجرا می کند:
$collection = collect(['michael', 'tom']); $collection->whenEmpty(function ($collection) { return $collection->push('adam');}); $collection->all(); // ['michael', 'tom'] $collection = collect(); $collection->whenEmpty(function ($collection) { return $collection->push('adam');}); $collection->all(); // ['adam'] $collection = collect(['michael', 'tom']); $collection->whenEmpty(function ($collection) { return $collection->push('adam');}, function ($collection) { return $collection->push('taylor');}); $collection->all(); // ['michael', 'tom', 'taylor']
برای معکوس
whenEmpty
،
whenNotEmpty
روش را ببینید.
whenNotEmpty()
این
whenNotEmpty
متد زمانی که مجموعه خالی نباشد، فراخوانی داده شده را اجرا می کند:
$collection = collect(['michael', 'tom']); $collection->whenNotEmpty(function ($collection) { return $collection->push('adam');}); $collection->all(); // ['michael', 'tom', 'adam'] $collection = collect(); $collection->whenNotEmpty(function ($collection) { return $collection->push('adam');}); $collection->all(); // [] $collection = collect(); $collection->whenNotEmpty(function ($collection) { return $collection->push('adam');}, function ($collection) { return $collection->push('taylor');}); $collection->all(); // ['taylor']
برای معکوس
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\User;use App\Post; $collection = collect([ new User, new User, new Post,]); $filtered = $collection->whereInstanceOf(User::class); $filtered->all(); // [App\User, App\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
مواردی را که کلید داده شده خالی نیست فیلتر می کند:
$collection = collect([ ['name' => 'Desk'], ['name' => null], ['name' => 'Bookcase'],]); $filtered = $collection->whereNotNull('name'); $filtered->all(); /* [ ['name' => 'Desk'], ['name' => 'Bookcase'], ]*/
whereNull()
متد
whereNull
مواردی را که کلید داده شده تهی است فیلتر می کند:
$collection = collect([ ['name' => 'Desk'], ['name' => null], ['name' => 'Bookcase'],]); $filtered = $collection->whereNull('name'); $filtered->all(); /* [ ['name' => null], ]*/
wrap()
روش استاتیک
wrap
مقدار داده شده را در صورت امکان در یک مجموعه پیچیده می کند:
$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
پیام مرتبه بالاتر برای فراخوانی یک متد در هر شیء در یک مجموعه استفاده
کنیم:
$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\LogEntry;use Illuminate\Support\LazyCollection; LazyCollection::make(function () { $handle = fopen('log.txt', 'r'); while (($line = fgets($handle)) !== false) { yield $line; }})->chunk(4)->map(function ($lines) { return LogEntry::fromLines($lines);})->each(function (LogEntry $logEntry) { // Process the log entry...});
یا تصور کنید که باید از طریق 10000 مدل Eloquent تکرار کنید. هنگام استفاده از مجموعه های سنتی لاراول، همه 10000 مدل Eloquent باید به طور همزمان در حافظه بارگذاری شوند:
$users = App\User::all()->filter(function ($user) { return $user->id > 500;});
با این حال، متد سازنده پرس و جو
cursor
یک
LazyCollection
نمونه را برمی گرداند.
این به شما این امکان را می دهد که همچنان فقط یک پرس و جو را در مقابل
پایگاه داده اجرا کنید، اما تنها یک مدل Eloquent را در هر زمان در حافظه بارگذاری کنید.
در این مثال،
filter
تماس برگشتی اجرا نمیشود تا زمانی که در واقع بر روی هر کاربر بهصورت
جداگانه تکرار کنیم، و امکان کاهش شدید مصرف حافظه را فراهم کنیم:
$users = App\User::cursor()->filter(function ($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
قرارداد را پیاده سازی می کنند که روش های زیر را تعریف می کند:
همه میانگین میانگین تکه سقوط - فروپاشی جمع آوری کنید ترکیب کردن concat شامل شامل Strict شمردن شمارش توسط crossJoin DD تفاوت diffAssoc کلیدهای diff زباله تکراری duplicatesStrict هر یک هر گسترش هر بجز فیلتر اولین اول کجا فلت مپ صاف کردن تلنگر برای صفحه گرفتن دسته بندی بر اساس دارد منفجر شدن تقاطع intersectByKeys خالی است isNotEmpty است پیوستن کلید توسط کلیدها آخر کلان ساختن نقشه نقشه به mapSpread mapToGroups mapWithKeys حداکثر میانه ادغام mergeRecursive دقیقه حالت نهمین فقط پد تقسیم بندی لوله چیدن تصادفی كاهش دادن رد کردن جایگزین کردن جایگزین بازگشتی معکوس جستجو کردن بر زدن جست و خیز کردن تکه مقداری مرتب سازی مرتب سازی بر اساس sortByDesc کلیدهای مرتب سازی sortKeysDesc شکاف مجموع گرفتن ضربه زدن بار به آرایه به جیسون اتحاد. اتصال منحصر بفرد منحصربفردStrict مگر اینکه مگر اینکه خالی باشد مگر اینکه خالی نباشد باز کردن ارزش های چه زمانی وقتی خالی WhenNotEmpty جایی که کجا سخت جایی که بین که در آن WhereInStrict WhereInstanceOf WhereNotBetween WhereNotIn WhereNotInStrict بسته بندی کردن زیپ
متدهایی که مجموعه را تغییر می دهند (مانند
shift
،pop
وprepend
غیره) در کلاس موجود نیستندLazyCollection
.
روش های مجموعه تنبل
علاوه بر متدهای تعریف شده در
Enumerable
قرارداد،
LazyCollection
کلاس شامل متدهای زیر است:
tapEach()
در حالی که
each
متد فوراً تماس داده شده را برای هر آیتم در مجموعه فراخوانی می کند،
tapEach
متد تنها زمانی که آیتم ها یکی یکی از لیست خارج می شوند، تماس داده شده را
فراخوانی می کند:
$lazyCollection = LazyCollection::times(INF)->tapEach(function ($value) { dump($value);}); // Nothing has been dumped so far... $array = $lazyCollection->take(3)->all(); // 1// 2// 3
remember()
این
remember
متد یک مجموعه تنبل جدید را برمیگرداند که مقادیری را که قبلاً شمارش
شدهاند به خاطر میآورد و پس از شمارش مجدد مجموعه، آنها را دوباره بازیابی نمیکند:
$users = User::cursor()->remember(); // No query has been executed yet... $users->take(5)->all(); // The query has been executed and the first 5 users have been hydrated from the database... $users->take(20)->all(); // First 5 users come from the collection's cache... The rest are hydrated from the database...