آموزش متد search کالکشن لاراول به همراه مثال

آموزش متد search کالکشن لاراول موضوع مورد بحث در این مقاله از باورژن است. از متد سرچ برای جستجو کردن یک مقدار در یک کالکشن استفاده می‌شود. اگر مقدار در مجموعه وجود داشته باشد، کلید مقدار را ریترن می‌کند. اگر مقدار با هیچ آیتمی مطابقت نداشته باشد، false برگردانده می‌شود.

متد search کالکشن لاراول

جستجو به دو صورت انجام می شود.

  1. جستجو با مقایسه سُست (loose comparison)
  2. جستجو با مقایسه سخت‌گیرانه (strict comparison)

جستجو با مقایسه سست در متد search کالکشن لاراول

جستجو با مقایسه سست به این معنی است که عدد صحیح به صورت استرینگ با عدد صحیح به صورت عدد صحیح، برابر در نظر گرفته می‌شوند. اگر بخواهید این مقایسه به صورت سخت‌گیرانه انجام شود، باید مقدار true را به عنوان آرگومان دوم به پارامتر پاس دهید. متد search کالکشن را می‌توانید در کلاس Illuminate\Support\Collection پیدا کنید. این متد را ادامه می‌بینید.

public function search($value, $strict = false)
{
     if (! $this->useAsCallable($value)) {
         return array_search($value, $this->items, $strict);
     }

     foreach ($this->items as $key => $item) {
         if (call_user_func($value, $item, $key)) {
             return $key;
         }
     }

     return false;
}

اگر بخواهیم متد search کالکشن را کالبدشکافی کنیم، در باطن متد array_search() را فراخوانی می‌کند. مثال زیر را ببینید.

این کدها را در مسیر routes >> web.php بنویسید.

<?php

// web.php

Route::get('/', function () {
    $collection = collect([21, 19, 46, 29]);

    echo $collection->search(19)."\n";

});

بعد از اجرای کردن پروژه لاراولی، عدد 1 را در خروجی خواهید دید. به این معنی که 19 در آرایه وجود دارد و کلید یا اندیس آن 1 است که بازگردانده شد.

جستجو با مقایسه سخت‌گیرانه در متد search کالکشن لاراول

بیایید اینار یک جستجوی سخت‌گیرانه انجام دهیم.

<?php

// app.php

Route::get('/', function () {
    $collection = collect([21, 19, 46, 29]);
    echo $collection->search('19', true);
});

خروجی این قطع کد false خواهد بود. اما چرا؟!! به این دلیل که به دنبال استرینگ با مقدار 19 بودیم نه عدد صحیح! و نکته دیگر اینکه ما مقایسه سخت‌گیرانه انجام دادیم چون پارامتر دوم را true قرار دادیم.

همچنین روش جایگزین دیگری نیز وجود دارد، می‌توانید به متد search یک کال بک (فانکشن بی نام) را پاس دهید تا با استفاده از دستورات بیشتری مقدارها را بررسی کند. این کال بک اندیس اولین آیتم منطبق را به عنوان خروجی ریترن می کند. به کد زیر توجه کنید.

<?php

// app.php

Route::get('/', function () {
    $collection = collect([19, 21, 46, 29]);
    echo $collection->search(function($item, $key) {
        return $item > 19;
    });
});
 

در کد بالا، هر آیتمی از کالکشن که بزرگتر از 19 باشد ریترن می‌شود. اینجا 21 اولین آیتمی است که از 19 بزرگتر است و اندیس آن 1 است. بنابراین خروجی 1 خواهد بود.

رقیه اباذری

رقیه اباذری

تو دانشگاه IT خوندم و اکثر منابع کتاب‌های ترجمه شده بودند و صدالبته مبهم :( مثلا element رو "عنصر" ترجمه می‌کردن و من همیشه می‌رفتم تو شیمی و جدول مندلیف. تو باورژن سعی کردم تا حد ممکن مطالب رو با زبان ساده و قابل درک بنویسم. باشد که کسانی که تازه پا به عرصه برنامه‌نویسی گذاشتن، راغب‌تر بشن و با نظرات و فیدبک‌های شما راه هموارتر بشه:)

دیدگاه‌ها


ثبت دیدگاه