شاید عنوان این مطلب برای شما کمی گیج کننده باشه ، اما بزارید براتون با یک مثال سادش کنم شما دارای لیستی از مشتری هستید و اونا رو با دستور Customer::all() نمایش میدید اما شما میخواین دو لیست جداگانه از مشتری های که در کشور انگلیس و کشور خودمون هستن رو به نمایش بزارید . خوب شما چطور این کار رو برای ساخت دو لیست جداگانه از یک دستور انجام میدید ؟ برای این کار یک تابع به نام filter() وجود داره.
در زیر مثالی برای درک بهتر filter میزنم ، بطور معمول شما اطلاعات مشتریهاتون رو بصورت زیر دریافت میکنید.
$customers = Customer::all();
پس از برگشت اطلاعات بصورت بالا شما با استفاده از یک function داخل filter() به راحتی میتونید شرط خودتون برای نمایش اطلاعات رو مشخص کنید. بصورت زیر
$uk_customers = $customers->filter(function ($customer) {
return $customer->country == 'United Kingdom';
});
حالا شما دارای یک مجموعه (collection) جدید داخل متغیر $uk_customers هستید ، اما متغیر قدیمی $customers هنوز بدونه تغییر باقی مونده و شما میتونید برای داشتن لیست بعدی ازش استفاده کنید . حالا در زیر فیلتر دیگه ای برای مشتری های که در کشور خودمون هستن با متغیر بدون تغییر $customers بوجود میاریم .
$ir_customers = $customers->filter(function ($customer) {
return $customer->country == 'Iran';
});
خب ، حالا شما داری دو لیست جدا گانه در متغیر های $uk_customers و $ir_customers هستید و میتونید از هر کدوم بطور جداگانه و در جداول جداگانه استفاده کنید .
همچنین تابع دیگه ای به اسم reject() وجود داره که عملی برعکس کار تابع filter رو انجام میده . برای مثال شما میخواین همه مشتری هاتون بجز مشتری های کشور انگلیس رو داشته باشید باید از کد زیر استفاده کنید .
$non_uk_customers = $customers->reject(function ($customer) {
return $customer->country == 'United Kingdom';
});
امیدوارم براتون مفید بوده باشه
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید