قبل از شروع معرفی متد فیلتر، بهتر است بدانیم کالکشن چیست؟ کلاس Illuminate\Support\Collection
در لاراول یک wrapper است. این wrapper کار با دادههایی که از نوع آرایه هستند را برای ما فراهم کرده است. در کالکشن چند متد از جمله متد all()
، Chunk()
، Collapse
و .... داریم. در این مقاله منحصرا متد filter کالکشن را با هم بررسی می کنیم. با ما همراه باشید.
متد filter
کالکشن، همانطور که از نام آن پیداست، کار فیلتر را انجام می دهد. اما خب به چه صورت؟!
متد filter کالکشن در لاراول
این متد آیتم های یک مجموعه را با شرط مشخص شده در فانکشن callback
فیلتر میکند. خروجی متد به صورت آرایه است. بعد از اعمال فیلتر، موارد دارای شرط فیلتر، نگه داشته میشوند. پس در خروجی آرایهای از آیتمهای منطبق با شرط را داریم.
همانطور که بالاتر اشاره کردیم، متد filter کالکشن در کلاس Illuminate\Support\Collection
است. به متد زیر توجه کنید.
public function filter(callable $callback = null)
{
if ($callback) {
return new static(Arr::where($this->items, $callback));
}
return new static(array_filter($this->items));
}
فانکشن filter
، یک callback
را به عنوان آرگومنت میگیرد و فیلتر را روی هر مورد اجرا میکند. اگر نتیجه تست برای یک مورد خاص منفی بود، آن را از مجموعه خارج میکند.
خب برویم سراغ یک مثال عملی
متد filter کالکشن در لاراول را در مسیر routes >> web.php تست و پیاده سازی میکنیم. کدهای زیر را در پوشه web.php بنویسید.
<?php
// web.php
Route::get('/', function () {
$collection = collect([19, 21, 29, 46]);
$filtered = $collection->filter(function ($value, $key) {
return $value > 21;
});
dd($filtered->all());
});
شرطی که در این متد بررسی می شود 21> است. اگر آیتمی پیدا شد که شرط را داشت، آن را در یک آرایه جدید می گذارد.
اکنون، با وارد کردن دستور زیر در root پروژه، سرور Laravel را شروع کنید.
php artisan serve
با وارد کردن آی پی http://localhost:8000 در مرورگر، خروجی زیر را خواهید دید:
خروجی به این معناست که آرایه ای با تمام آیتم هایی که شرط 21 > را داشتند، برای ما لیست شده است. مسلما موارد باقیمانده هم از کالکشن حذف می شوند.
در صورت عدم انطباق با شرط callback
، تمام داده های مجموعه که برابر با false
هستند، حذف می شوند.
<?php
// web.php
Route::get('/', function () {
$collection = collect([0, 1, 2, 3, 4, 5]);
$filtered = $collection->filter();
dd($filtered->all());
});
در کد بالا، ورودی 0 حذف شده است. دلیل این است که 0 به عنوان یک متغیر boolean
که false
است در نظر گرفته شده است. خروجی به شکل زیر خواهد بود.
رقیه اباذری
تو دانشگاه IT خوندم و اکثر منابع کتابهای ترجمه شده بودند و صدالبته مبهم :( مثلا element رو "عنصر" ترجمه میکردن و من همیشه میرفتم تو شیمی و جدول مندلیف. تو باورژن سعی کردم تا حد ممکن مطالب رو با زبان ساده و قابل درک بنویسم. باشد که کسانی که تازه پا به عرصه برنامهنویسی گذاشتن، راغبتر بشن و با نظرات و فیدبکهای شما راه هموارتر بشه:)
دیدگاهها
ثبت دیدگاه