PHP: array_search - بحث سريع من خلال صفيف. PHP array_search: البحث عن قيمة في مصفوفة بحث سريع في مصفوفة PHP

💖 هل يعجبك؟شارك الرابط مع أصدقائك

يعد البحث عن قيمة في مصفوفة أمرًا مطلوبًا في كل تطبيق PHP وبرنامج نصي يعمل مع البيانات تقريبًا، حيث يوجد العديد من الطرق والوظائف الخاصة. اعتمادا على المهمة ونوع البحث، يجب عليك استخدام أدوات معينة، مع مراعاة ميزاتها وسرعة التنفيذ وسهولة الاستخدام. بعد ذلك، سوف نتعرف على وظائف PHP للبحث عن العناصر في المصفوفة، والإنشاءات والأساليب الممكنة، ونكتشف أيضًا الطريقة الأسرع.

وظائف للبحث في صفيف:
array_search- يستخدم للبحث عن قيمة في مصفوفة. إذا نجح الأمر، فإنه يُرجع مفتاح القيمة المطلوبة؛ وإذا لم يتم العثور على أي شيء، فإنه يُرجع FALSE. قبل الإصدار PHP 4.2.0، كان الدالة array_search()‎ تُرجع NULL بدلاً من FALSE عند الفشل.

بناء جملة الدالة مختلط array_search (إبرة مختلطة، صفيف كومة قش [، منطقي صارم]).

foreach (array_expression كقيمة $)
إفادة
foreach (array_expression كـ $key => $value)
إفادة

مثال على استخدام دالة ذات البنية foreach للبحث عن عنصر مصفوفة، وإرجاع TRUE عند النجاح

بناء الجملة
بينما (إكسبر)
إفادة

إرجاع مفتاح عنصر الصفيف عند النجاح

من جدول القياسات يتبين أن الوظيفة array_search، يعرض أفضل النتائج عند البحث في صفائف صغيرة وكبيرة. وفي الوقت نفسه، يزداد وقت البحث باستخدام الحلقات بشكل كبير اعتمادًا على حجم المصفوفة.

إحدى العمليات الرئيسية عند العمل مع المصفوفات هي البحث عن قيمة محددة. تم تصميم وظيفة PHP array_search() لهذا الغرض. إنه قادر على معالجة المجموعات أحادية البعد والمجموعات الترابطية، وإرجاع مفتاح القيمة التي تم البحث عنها إذا تم العثور عليها في المصفوفة.

بناء الجملة

الوصف الرسمي لوظيفة array_search() في PHP هو كما يلي:

array_search مختلطة (قيمة مختلطة، مجموعة $ مجموعة [، منطقية صارمة])

معلمات الإدخال:

  • مجموعة $ - المصفوفة التي سيتم إجراء البحث فيها؛
  • القيمة - القيمة المطلوبة من أي نوع؛
  • صارمة هي علامة منطقية اختيارية تحدد آلية مقارنة صارمة للنوع.

آلية العمل

تقوم وظيفة PHP array_search() بمقارنة القيمة واحدة تلو الأخرى مع جميع القيم الموجودة في مصفوفة المجموعة. افتراضيًا، يتم إجراء المقارنة بغض النظر عن أنواع المعاملات. يمكن تغيير هذا الإعداد عن طريق تعيين العلامة الصارمة على TRUE. تعتبر مقارنات السلسلة حساسة لحالة الأحرف.

إذا تم العثور على تطابق، فسيتم إرجاع المفتاح المقابل للعنصر الذي تم العثور عليه وتتوقف الوظيفة عن التشغيل. ولذلك، لا يمكن استخدامه للكشف عن تكرارات متعددة للقيمة المطلوبة في صفيف.

إذا لم يتم العثور على أي تطابقات، فستُرجع الدالة القيمة المنطقية FALSE.

يجب عليك التحقق من النتيجة التي تم إرجاعها باستخدام عامل المساواة الصارم (===). يعد هذا أمرًا مهمًا لأن الدالة قد تُرجع قيمة تم تحويلها إلى FALSE، مثل 0 أو السلسلة الفارغة.

أمثلة على الاستخدام

مثال 1. عند تمرير مصفوفة متعددة الأبعاد إلى الدالة PHP array_search()، ستكون نتيجة العمل هي مفتاح العنصر الذي تم البحث عنه.

"شتاء"، "الموسم 2" => "الربيع"، "الموسم 3" => "الصيف"، "الموسم 4" => "الخريف")؛ $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() أيضًا معالجة مصفوفة أحادية البعد، معتبرة مفاتيحها بمثابة المؤشرات الرقمية التالية.

سيتم تعيين متغير النتيجة $ على 1، وفقًا لفهرس عنصر "الصياد" في المصفوفة $.

مثال 3. خطأ محتمل عند تحليل النتيجة.

"واشنطن"، 1 => "آدامز"، 2 => "جيفرسون"، 3 => "ماديسون"، 4 => "مونرو")؛ $result = array_search("واشنطن", $presidents); if (!$result) ( echo "لم يكن ج. واشنطن أول رئيس للولايات المتحدة الأمريكية"; ) ?>

لذلك، دون التحقق من النتيجة مع المساواة الصارمة، يمكنك الحصول على رسالة غير متوقعة مفادها أن جورج واشنطن لم يكن أول رئيس للولايات المتحدة.

مثال 4: يتم إرجاع مفتاح المطابقة الأولى التي تم العثور عليها فقط.

على الرغم من أن القيمة التي تبحث عنها تحدث ثلاث مرات في المصفوفة، فإن الدالة ستعيد فقط النتيجة الأولى التي تم العثور عليها - 0. للعثور على تطابقات متعددة، يوصى باستخدام وظيفة PHP array_keys().

لقد كنت أستخدم وظيفة array_search() لفترة طويلة للبحث عن القيم في مصفوفة، حيث سمعت وقرأت مرارًا وتكرارًا أنها تعمل بشكل أسرع بشكل ملحوظ من البحث في مصفوفة في حلقة، لكنني لم أفعل ذلك تعرف كم هو أسرع. أخيرًا تمكنت من التحقق منها وإحصائها بنفسي.

لقد قارنت سرعة البحث من خلال مصفوفة باستخدام هذه الوظيفة مع البحث المعتاد من خلال مصفوفة في حلقات foreach و while. في عناصر المصفوفة 10-100 يكون الفرق غير ملحوظ والوقت قصير جدًا بحيث يمكن إهماله. ولكن بالنسبة للمصفوفات الكبيرة، تبين أن الفرق كبير جدًا. مع زيادة حجم المصفوفة بترتيب من حيث الحجم، زاد وقت البحث أيضًا بشكل ملحوظ. مع مائة ألف عنصر، انخفضت سرعة foreach إلى 0.013 ثانية، وفي حين - إلى 0.017، بينما تباطأ array_search() أيضًا، لكنه ظل أسرع بمقدار 0.004 ثانية. بالنسبة لبرنامج نصي كبير يعمل مع مصفوفات كبيرة، فإن استبدال البحث في حلقة ببحث باستخدام array_search() لن يكون "تحسينًا للبرغوث" على الإطلاق.

وفي هذا الصدد، تذكرت مناقشة أجريتها مؤخرًا مع أحد زملائي في العمل حول ما إذا كان المبرمج يحتاج إلى معرفة كل هذه الوظائف اللغوية المدمجة، أو ما إذا كانت "عقلية المبرمج" والمعرفة العامة كافية. دون الخوض في مناقشة حول هذه العقلية بالذات، أعتقد أنك لا تزال بحاجة إلى معرفة الوظائف، ربما ليس كل بناء الجملة بالتفصيل، ولكن على الأقل ما هي الوظائف الموجودة وما يمكنها القيام به بشكل عام.

محدث: أنت بحاجة إلى عقلية المبرمج أيضًا! والحرص على ذاكرتك لن يضر (مستوحاة من الفواصل والمدى :)

يوجد أسفل الاختراق رمز البرنامج النصي الذي تم استخدامه لحساب الوقت:

كتلة $=100000; // عدد القيم في المصفوفة التي سنبحث فيها
بحث $=50000; // سنبحث عن هذه القيمة في المصفوفة
$first_result=array(); // مجموعة من النتائج لحساب متوسط ​​قيمة الخيار الأول
$sec_result=array(); // مجموعة من النتائج لحساب متوسط ​​قيمة الخيار الثاني
$third_result=array(); // مجموعة من النتائج لحساب متوسط ​​قيمة الخيار الثالث

// إنشاء وتعبئة المصفوفة
$test_array = range(0, $mass-1); // بفضل SelenIT))

/*
$test_array=array();
لـ ($i=0; $i<$mass; $i++)
{
$test_array=$i;
}
*/

// حلقة لحساب القيم المتوسطة
لـ ($د=0؛ $د<30; $d++) {

//*************** البحث باستخدام array_search *******************

// ابدأ في حساب الوقت
$time_start = ميكروتايم(1);
// يبحث
$key = array_search($search, $test_array, true);
// ان وجد
إذا ($key!==FALSE) // ضروري!== وليس!=، لأن رقم العنصر الأول هو 0
{
صدى $test_array[$key];
}
$time_end = ميكروتايم(1);
// عد نهاية الوقت

// الكتابة إلى مجموعة من القيم
$first_result= $time_end - $time_start;

//*************** البحث في مصفوفة باستخدام حلقة foreach *******************

// ابدأ في حساب الوقت
$time_start = ميكروتايم(1);
// البحث نفسه
foreach ($test_array كـ $ta)
{
إذا ($تا==$بحث)
{
صدى $تا؛
استراحة؛
}
}
$time_end = ميكروتايم(1);
// عد نهاية الوقت

// الكتابة إلى مجموعة من القيم
$sec_result= $time_end - $time_start;

//*************** البحث في مصفوفة باستخدام حلقة while *******************

// ابدأ في حساب الوقت
$time_start = ميكروتايم(1);

// تحديد طول المصفوفة
$count=count($test_array);
$ي=0;
// البحث نفسه
بينما (ي<$count)
{
إذا ($test_array[$j]==$search) // إذا وجد
{
صدى $test_array[$j];
استراحة؛
}
$ي++;
}
$time_end = ميكروتايم(1);
// عد نهاية الوقت

// الكتابة إلى مجموعة من القيم
$third_result= $time_end - $time_start;
}

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

Printf("تم إكمال الكود الأول في المتوسط: %.7f ثانية"، $srednee1);
printf("تم إكمال الكود الثاني في المتوسط ​​خلال: %.7f ثانية"، $srednee2);
printf("اكتمل الكود الثالث في المتوسط ​​خلال: %.7f ثانية"، $srednee3);

// نتيجة:
// الكود الأول المكتمل في المتوسط: 0.0000295 ثانية
// الكود الثاني مكتمل في المتوسط: 0.0153386 ثانية
// الكود الثالث مكتمل في المتوسط: 0.0226001 ثانية

(PHP 4 >= 4.0.5، PHP 5)

array_search - يبحث عن قيمة معينة في مصفوفة ويعيد المفتاح المقابل إذا نجح

وصف

مختلط array_search(إبرة مختلطة، مجموعة كومة قش [، منطقية صارمة])

يبحث عن قيمة الإبرة في كومة القش ويعيد المفتاح إذا كان موجودًا في المصفوفة، خطأ شنيعخلاف ذلك.

تعليق:إذا كانت الإبرة عبارة عن سلسلة، فسيتم إجراء مقارنة حساسة لحالة الأحرف.

تعليق:ما يصل إلى PHP 4.2.0، array_search()عاد إذا لم ينجح باطلبدلاً من خطأ شنيع .

إذا قمت بتمرير القيمة حقيقيكمعلمة ثالثة اختيارية صارمة، الدالة array_search()سيتحقق أيضًا من نوع الإبرة الموجودة في مصفوفة كومة القش.

إذا كانت الإبرة موجودة في كومة القش أكثر من مرة، فسيتم إرجاع المفتاح الأول الذي تم العثور عليه. لإرجاع المفاتيح لجميع القيم التي تم العثور عليها، استخدم الدالة مفاتيح_المصفوفة()باستخدام معلمة search_value الاختيارية.


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

$array = array(0 => "blue" , ​​​​1 => "red" , 2 => 0x000000 , 3 => "green" , 4 => "red" );$key = array_search ("red" , $صفيف); // مفتاح $ = 1;
$key = array_search("green" , $array ); // مفتاح $ = 2; (0x000000 == 0 == "أخضر")
$key = array_search ("green" , $array , true ); // مفتاح $ = 3؛
?>
انتباه

يمكن أن تعود هذه الوظيفة كقيمة منطقية خطأ شنيع، وهي قيمة غير منطقية يتم إرسالها إليها خطأ شنيع، على سبيل المثال 0 أو "". لمزيد من المعلومات، راجع قسم النوع المنطقي. استخدم عامل التشغيل === للتحقق من القيمة التي يتم إرجاعها بواسطة هذه الوظيفة.

أخبر الأصدقاء