نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی
  • خانه
  • ویندوز 8
  • Php در یک آرایه بر اساس بخشی از مقدار جستجو کنید. PHP: array_search - جستجوی سریع آرایه

Php در یک آرایه بر اساس بخشی از مقدار جستجو کنید. PHP: array_search - جستجوی سریع آرایه

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

نحو

توضیح رسمی تابع array_search() در PHP به شرح زیر است:

آرایه_جستجوی مختلط (مقدار مختلط، آرایه $collection [, bool strict])

پارامترهای ورودی:

  • $collection - آرایه ای که جستجو در آن انجام می شود.
  • مقدار - مقدار مورد نظر از هر نوع؛
  • strict یک پرچم بولی اختیاری است که یک مکانیسم مقایسه دقیق از نوع آگاه را تنظیم می کند.

مکانیسم عملیات

تابع PHP array_search() مقدار را یکی یکی با تمام مقادیر موجود در آرایه مجموعه مقایسه می کند. به طور پیش فرض، مقایسه بدون توجه به انواع عملوندها انجام می شود. این تنظیم را می توان با تنظیم پرچم سخت روی TRUE تغییر داد. مقایسه رشته ها به حروف بزرگ و کوچک حساس هستند.

اگر مطابقت پیدا شد، کلید مربوط به عنصر پیدا شده برگردانده می شود و عملکرد متوقف می شود. بنابراین، نمی توان از آن برای تشخیص وقوع چندگانه مقدار مورد نظر در یک آرایه استفاده کرد.

اگر هیچ منطبقی پیدا نشد، تابع مقدار بولی FALSE را برمی گرداند.

شما باید نتیجه برگشتی را با استفاده از عملگر برابری دقیق (===) بررسی کنید. این مهم است زیرا تابع ممکن است مقداری را برگرداند که به FALSE فرستاده شده است، مانند 0 یا رشته خالی.

نمونه هایی از استفاده

مثال 1. هنگام ارسال یک آرایه چند بعدی به تابع PHP array_search()، نتیجه کار کلید عنصر جستجو شده خواهد بود.

"winter", "season2" => "spring", "season3" => "summer", "season4" => "پاییز"); $result1 = array_search("winter", $array); $result2 = array_search("summer", $array); $result3 = array_search("آوریل"، $array); ?>

در این مثال، $result1 روی "season1"، $result2 روی "season3" و $result3 روی مقدار بولی FALSE تنظیم می شود زیرا رشته "april" در آرایه منبع ظاهر نمی شود.

مثال 2. تابع PHP array_search() همچنین می تواند یک آرایه یک بعدی را پردازش کند و کلیدهای آن را به عنوان شاخص های عددی زیر در نظر بگیرد.

متغیر $result با توجه به شاخص عنصر "hunter" در آرایه $ روی 1 تنظیم می شود.

مثال 3. خطای احتمالی هنگام تجزیه و تحلیل نتیجه.

"واشنگتن"، 1 => "آدامز"، 2 => "جفرسون"، 3 => "مدیسون"، 4 => "مونرو"); $result = array_search("واشنگتن"، $presidents); if (!$result) ( تکرار "جی. واشنگتن اولین رئیس جمهور ایالات متحده نبود"؛ ) ?>

بنابراین، بدون بررسی نتیجه با برابری دقیق، می توانید یک پیام غیرمنتظره دریافت کنید که جورج واشنگتن اولین رئیس جمهور ایالات متحده نبود.

مثال 4: فقط کلید اولین بازی یافت شده برگردانده می شود.

حتی اگر مقداری که به دنبال آن هستید سه بار در آرایه رخ دهد، تابع فقط اولین نتیجه یافت شده - 0 را برمی گرداند. برای یافتن چندین تطابق، توصیه می شود از تابع PHP array_keys() استفاده کنید.

(PHP 4 >= 4.0.5، PHP 5)

array_search - یک مقدار معین را در یک آرایه جستجو می کند و در صورت موفقیت، کلید مربوطه را برمی گرداند

شرح

مختلط آرایه_جستجو(سوزن مخلوط، انبار کاه آرایه ای [، bool strict])

انبار کاه را برای مقدار سوزن جستجو می کند و در صورت وجود کلید در آرایه، آن را برمی گرداند. نادرستدر غیر این صورت.

اظهار نظر:اگر سوزن رشته ای باشد، مقایسه حساس به حروف بزرگ انجام می شود.

اظهار نظر:تا PHP 4.2.0، array_search()در صورت عدم موفقیت بازگردانده می شود خالیبجای نادرست .

اگر مقدار را پاس کنید درست است، واقعیبه عنوان یک پارامتر سوم اختیاری به تابع، تابع array_search()همچنین نوع سوزن موجود در آرایه انبار کاه را بررسی می کند.

اگر بیش از یک بار سوزن در انبار کاه وجود داشته باشد، اولین کلید پیدا شده برگردانده خواهد شد. برای برگرداندن کلیدهای تمام مقادیر یافت شده، از تابع استفاده کنید array_keys()با یک پارامتر search_value اختیاری.


مثال 1: مثال استفاده array_search()

$array = array(0 => "آبی" , 1 => "قرمز" , 2 => 0x000000 , 3 => "سبز" , 4 => "قرمز");$key = array_search ("قرمز" , آرایه $)؛ // $key = 1;
$key = array_search("سبز" , $array ); // $key = 2; (0x000000 == 0 == "سبز")
$key = array_search ("سبز" , $array , true ); // $key = 3;
?>
توجه

این تابع می تواند به عنوان یک مقدار بولی برگردد نادرست، یک مقدار غیر بولی که به آن فرستاده می شود نادرست، برای مثال 0 یا "". برای اطلاعات بیشتر به بخش Boolean type مراجعه کنید. از عملگر === برای بررسی مقدار برگردانده شده توسط این تابع استفاده کنید.

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

من سرعت جستجو در یک آرایه را با استفاده از این تابع با جستجوی معمول از طریق یک آرایه در حلقه‌های foreach و while مقایسه کردم. در عناصر آرایه 10-100 تفاوت قابل توجه نیست و زمان آنقدر کوتاه است که می توان از آن صرف نظر کرد. اما برای آرایه های بزرگ این تفاوت کاملاً قابل توجه بود. با افزایش اندازه آرایه با یک مرتبه بزرگی، زمان جستجو نیز به میزان قابل توجهی افزایش یافت. با صد هزار عنصر، سرعت foreach به 0.013 ثانیه کاهش یافت، و while - به 0.017، در حالی که array_search() نیز کند شد، اما همچنان یک مرتبه سریعتر باقی ماند - 0.004 ثانیه. برای یک اسکریپت بزرگ که با آرایه‌های بزرگ کار می‌کند، جایگزین کردن جستجو در یک حلقه با جستجو با استفاده از ()array_search به هیچ وجه «بهینه‌سازی کک» نخواهد بود.

در همین راستا، بحثی را با یکی از همکارانم در محل کارم به یاد آوردم که آیا یک برنامه نویس باید همه این توابع زبان داخلی را بداند یا اینکه "ذهنیت برنامه نویس" و دانش عمومی کافی است. بدون پرداختن به بحث در مورد این طرز فکر، من فکر می کنم که شما هنوز باید عملکردها را بدانید، شاید نه تمام نحو را با جزئیات، اما حداقل اینکه چه توابعی وجود دارد و چه کارهایی می توانند به طور کلی انجام دهند.

UPD: شما هم به طرز فکر یک برنامه نویس نیاز دارید! و مراقب حافظه خود باشید (با الهام از شکست و محدوده:)

در زیر هک کد اسکریپتی که برای محاسبه زمان استفاده شده است وجود دارد:

$ جرم = 100000; // تعداد مقادیر آرایه ای که در آن جستجو خواهیم کرد
$search=50000; // ما به دنبال این مقدار در آرایه خواهیم بود
$first_result=array(); // آرایه ای از نتایج برای محاسبه مقدار میانگین گزینه اول
$second_result=array(); // آرایه ای از نتایج برای محاسبه مقدار میانگین گزینه دوم
$third_result=array(); // آرایه ای از نتایج برای محاسبه مقدار میانگین گزینه سوم

// آرایه را ایجاد و پر کنید
$test_array = range(0, $mass-1); // با تشکر از SelenIT))

/*
$test_array=array();
برای ($i=0; $i<$mass; $i++)
{
$test_array=$i;
}
*/

// حلقه برای محاسبه مقادیر متوسط
برای ($d=0; $d<30; $d++) {

//**************** جستجو با استفاده از array_search *******************

// شروع به شمارش زمان
$time_start = microtime(1);
// جستجو کردن
$key = array_search ($search، $test_array، true);
// در صورت یافتن
اگر ($key!==FALSE) // ضروری است!== و نه!=، زیرا تعداد عنصر اول 0 است.
{
echo $test_array[$key];
}
$time_end = microtime(1);
// شمارش پایان زمان

// روی آرایه ای از مقادیر بنویسید
$first_result= $time_end - $time_start;

//**************** جستجو در یک آرایه با حلقه foreach *******************

// شروع به شمارش زمان
$time_start = microtime(1);
// خود جستجو
foreach ($test_array به صورت $ta)
{
اگر ($ta==$جستجو)
{
echo $ta;
زنگ تفريح؛
}
}
$time_end = microtime(1);
// شمارش پایان زمان

// روی آرایه ای از مقادیر بنویسید
$second_result= $time_end - $time_start;

//**************** جستجو در یک آرایه با حلقه while ******************

// شروع به شمارش زمان
$time_start = microtime(1);

// طول آرایه را تعیین کنید
$count=count($test_array);
$j=0;
// خود جستجو
در حالی که ($j<$count)
{
if ($test_array[$j]==$search) // اگر یافت شد
{
echo $test_array[$j];
زنگ تفريح؛
}
$j++;
}
$time_end = microtime(1);
// شمارش پایان زمان

// روی آرایه ای از مقادیر بنویسید
$third_result= $time_end - $time_start;
}

$srednee1=array_sum($first_result)/count($first_result);
$srednee2=array_sum ($second_result)/count($second_result);
$srednee3=array_sum ($third_result)/count($third_result);

Printf("اولین کد تکمیل شده به طور متوسط: %.7f ثانیه", $srednee1);
printf("دومین کد به طور متوسط ​​در: %7f ثانیه تکمیل شد", $srednee2);
printf("سومین کد به طور متوسط ​​در: %7f ثانیه تکمیل شد", $srednee3);

// نتیجه:
// کد اول به طور متوسط ​​تکمیل شد: 0.0000295 ثانیه
// کد دوم به طور متوسط ​​تکمیل شد: 0.0153386 ثانیه
// کد سوم به طور متوسط ​​تکمیل شد: 0.0226001 ثانیه

اغلب هنگام نوشتن کد، باید بررسی کنید که آیا مقدار عنصر خاصی در یک آرایه وجود دارد یا خیر. امروز به چندین عملکرد می پردازیم که با آنها می توانید این کار را انجام دهید.

بررسی وجود یک مقدار عنصر در یک آرایه می تواند برای حل مسائل مختلف برنامه نویسی استفاده شود.

ما می توانیم آرایه های مختلفی را از پایگاه داده خود دریافت کنیم و وجود یک مقدار خاص را در آن بررسی کنیم. مقدار مورد نظر را می توان از کاربر اسکریپت ما نیز زمانی که مثلاً به دنبال چیزی است منتقل کرد. بر اساس نتایج چنین جستجویی، می توانید اقدامات خاصی را انجام دهید. همه چیز به وظیفه خاصی بستگی دارد، با این حال، الگوریتم های جستجوی یک مقدار در یک آرایه یکسان خواهد بود.

امروز به آنها نگاه خواهیم کرد.

بررسی وجود یک مقدار در یک آرایه. تابع ()in_array

تابع in_array()به ما امکان می دهد وجود هر مقداری را در آرایه بررسی کنیم.

اگر نتیجه کار آن موفقیت آمیز باشد و عنصر مورد نظر در آرایه پیدا شود، تابع برمی گردد درست است، واقعی، یعنی "حقیقت".

تابع 2 پارامتر لازم را می گیرد:<Что ищем>و<Где ищем>.

همچنین می تواند یک پارامتر اختیاری دیگر نیز بگیرد:<Тип данных>. اگر این سومین پارامتر اختیاری روی درست است، واقعی، سپس نوع داده نیز بررسی می شود. یعنی «2» و «2» یکسان نخواهند بود. در حالت اول یک رشته و در حالت دوم یک عدد است. و سپس کل عملکرد in_array()مقداری را بر نمی گرداند درست است، واقعی.

همچنین باید به خاطر داشته باشید که تابع مقایسه‌های حساس به حروف بزرگ و کوچک را انجام می‌دهد.

بیایید با استفاده از یک مثال ساده به نحوه عملکرد این تابع نگاه کنیم.
ما به نوعی آرایه نیاز داریم. با استفاده از تابع، وجود یک مقدار را در آرایه بررسی می کنیم و یک پیام خاص را روی صفحه نمایش می دهیم.

پس از اجرا، تابع پیام "بله" را نشان می دهد، زیرا عنصر "Marina" در آرایه ما وجود دارد.

اولین پارامتر تابع را به عنصری که وجود ندارد تغییر دهید، پیام "خیر" را مشاهده خواهید کرد.

بررسی وجود یک مقدار در یک آرایه. تابع ()array_search

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

تابع همان پارامترهای قبلی را می گیرد. در این مورد، پارامتر سوم نیز اختیاری است.

بیایید ببینیم که چگونه می توان از آن هنگام کار با یک آرایه انجمنی استفاده کرد.

"اکتبر", "money"=>200,"name"=>"Mila"); $key = array_search("Mila",$Mass1); if($key) echo $key; ?>

در این حالت "name" را روی صفحه می بینیم، یعنی کلید عنصر مورد نظر با مقدار "Mila".

این دو تابع بسیار شبیه هستند و اساساً فقط در مقدار بازگشتی با هم تفاوت دارند.

یافتن یک مقدار در یک آرایه چند بعدی

اما اگر با یک آرایه چند بعدی کار کنیم چه؟ پس از همه، عناصر آن آرایه های دیگری خواهند بود.

در اینجا الگوریتم هایی که قبلاً در مورد آن صحبت کردیم کار نمی کنند.

در واقع آنقدرها هم پیچیده نیست، فقط باید کل مکانیسم را کمی پیچیده کنید و برای مثال از یک حلقه استفاده کنید. برای هر()، که با آرایه ها عالی کار می کند.

فرض کنید یک آرایه چند بعدی داریم. مقادیر فوری آن آرایه های دیگری هستند که ممکن است حاوی مقدار مورد نظر عنصر باشند.

تنها کاری که باید انجام دهید این است که از طریق عناصر آرایه اصلی حلقه بزنید برای هر(). هر عنصر این آرایه به یک کلید ($key) و یک مقدار ($value) تجزیه خواهد شد.

مقدار هر یک از آرایه های واقع در داخل آرایه چند بعدی اصلی خواهد بود. ما با این مقادیر کار خواهیم کرد و در هر آرایه داخلی مقدار عنصر مورد نظر را جستجو می کنیم.

در صورت یافتن، پیغامی مبنی بر وجود چنین عنصری و در غیر این صورت، پیام دیگری مبنی بر وجود چنین عنصری را نمایش خواهیم داد.

بیایید همه اینها را با کد مثال ببینیم:

"anna","id"=>234); $Mass2 = آرایه("name"=>"anton","id"=>24); $Mass2 = آرایه("name"=>"ivan","id"=>007); foreach($Mass2 به عنوان $key => $value) ($name .= in_array("ivan",$value); ) if($name) echo "OK! Element here!"; else echo "بدون عنصر وجود دارد!"; ?>

همانطور که می بینید، ابتدا خود آرایه چند بعدی را اعلام می کنیم.

علاوه بر این، در اینجا شما باید نه فقط یک علامت مساوی، بلکه ".=" بنویسید.

این کار به این دلیل انجام می شود که متغیر $name در هر تکرار بازنویسی نشود، بلکه تکمیل شود. از این گذشته، اگر در اولین تکرار یک عنصر پیدا شود و مقدار "true" روی متغیر $name نوشته شود، اما در تکرار دوم (یعنی در آرایه داخلی دوم) مقدار مورد نظر عنصر وجود نداشته باشد. ، سپس مقدار متغیر $name به سادگی بازنویسی می شود و در پایان به سادگی نتیجه صحیح را نمی گیریم.

همانطور که متوجه شدید، نتیجه این کد پیام «OK! عنصر اینجاست!

سعی کنید عنصر مورد نظر خود را به عنصری که وجود ندارد تغییر دهید و پیام "عدم عنصر وجود ندارد!"

البته وقتی عنصر خاصی پیدا می شود یا پیدا نمی شود، نمی توانیم فقط پیام ها را نمایش دهیم، بلکه برخی اقدامات دیگر را انجام دهیم. همه چیز به کاری که باید انجام دهید بستگی دارد. به عنوان مثال، اگر مقدار مورد نظر در آرایه باشد، می توانید اطلاعات خاصی و غیره را به کاربر بدهید.

برای امروز کافی است! امیدوارم درس واضح و مفید بوده باشد! سعی کنید خودتان کدهای مشابه بنویسید تا همه چیز را به طور کامل درک کنید.

و منتظر نظرات شما هستم

با استفاده از دکمه های اجتماعی درس را با دوستان خود به اشتراک بگذارید. شبکه های واقع در زیر و همچنین در به روز رسانی وبلاگ مشترک شوید. ما قبلاً یک آرشیو نسبتاً خوب از مواد مفید جمع آوری کرده ایم و آنها فقط دوباره پر می شوند!

برای شما برنامه نویسی موفق آرزو می کنم!

آنا کوتلنیکووا با شما بود!

بهترین مقالات در این زمینه