Menu
flag Ar iconالعربيةdown icon

الدالة array_search() في PHP: إيجاد مفتاح قيمة

تعيد array_search($value, $array) مفتاح أول عنصر يساوي $value، أو false عندما لا يوجد. ولأن المفتاح قد يكون 0، اختبر النتيجة دائمًا بـ !== false. تعلّم البحث الصارم، وإيجاد كل التطابقات، والبحث في مصفوفة متعددة الأبعاد بـ array_column، والبحث دون حساسية لحالة الأحرف.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

تعيد array_search($value, $array) مفتاح أول عنصر يساوي $value، أو false إذا لم يتطابق أي عنصر. ولأن المفتاح الموجود قد يكون 0، اختبر النتيجة بـ !== false، كما في if (($key = array_search('pear', $fruits)) !== false).

إذا لم تكن تحتاج إلا إلى نعم أو لا، فإن in_array() تقول ذلك مباشرة. أما array_search() فلحين تحتاج إلى معرفة مكان القيمة، مثلًا لتغييرها أو حذفها.

مشكلة 0 مقابل false

أشهر أخطاء array_search(): القيمة هي العنصر الأول، ومفتاحها 0، وif ($key) تعامل 0 على أنه خاطئ. فتقول الشيفرة «غير موجودة» عن قيمة موجودة أمامها. قارن بـ !== false، التي لا تطابق إلا false حقيقية.

في != false الخطأ نفسه الذي في if ($key)، لأن 0 == false تساوي true. ولا يميّز بينهما إلا العامل الصارم.

البحث الصارم

مثل in_array()، تقارن array_search() بـ == ما لم تمرر true وسيطًا ثالثًا. يسمح الوضع المرن لنص بأن يجد عددًا ولـ null بأن تجد 0، فيعيد مفتاحًا لم تتوقعه.

إيجاد كل المفاتيح لقيمة

تتوقف array_search() عند أول تطابق. وتعيد array_keys($array, $value) كل مفتاح مطابق في مصفوفة؛ أضف true لمقارنة صارمة. النتيجة الفارغة تعني عدم وجود تطابق، فلا التباس بين 0 وfalse.

البحث في مصفوفة متعددة الأبعاد بـ array_column

لا تبحث array_search() داخل المصفوفات المتداخلة. لقائمة من الصفوف، استخرج الحقل الذي تبحث فيه بـ array_column()؛ تطابق المواضع في تلك القائمة أرقام الصفوف، فتكون النتيجة فهرس الصف.

تعيد array_column() ترقيم مخرجاتها من 0، لذا لا يتطابق هذا إلا عندما تكون الصفوف مرقمة 0, 1, 2 دون فجوات. بعد unset() أو array_filter() تظهر فجوات في الترقيم؛ شغّل array_values() على الصفوف أولًا أو استخدم البحث بالمفاتيح في السطرين الأخيرين. في array_column() مزيد عن صيغة مفتاح الفهرس.

البحث دون حساسية لحالة الأحرف

تقارن array_search() النصوص حرفيًا. حوّل الطرفين إلى أحرف صغيرة لتجاهل حالة الأحرف. تُبقي array_map() المفاتيح، لذا فالمفتاح الذي تحصل عليه هو المفتاح في المصفوفة الأصلية.

البحث ثم الاستبدال أو الحذف

السبب المعتاد للبحث هو التصرف في العنصر الذي وجدته. ومع المفتاح في يدك، أسند إليه لتغييره أو استخدم unset() لحذفه، واحمِ ذلك دائمًا بـ !== false أولًا: تحذف unset($arr[false]) بصمت العنصر ذا المفتاح 0.

الأسئلة الشائعة

ماذا تعيد array_search إذا لم تُوجد القيمة؟

false. وعندما توجد القيمة تعيد مفتاحها، وقد يكون 0 أو نصًا فارغًا، لذا افحص النتيجة بـ !== false، لا بـ if ($key) ولا بـ != false أبدًا.

لماذا يفشل فحص array_search مع العنصر الأول؟

للعنصر الأول في مصفوفة مفهرسة المفتاح 0، و0 قيمة خاطئة منطقيًا. لذا تأخذ if (array_search('a', ['a', 'b'])) فرع عدم الوجود. اكتب if (array_search('a', $arr) !== false).

كيف أجد كل المفاتيح لقيمة في PHP؟

تتوقف array_search() عند أول تطابق. أما array_keys($array, $value, true) فتعيد كل مفتاح تطابق قيمته، في مصفوفة (فارغة عندما لا يوجد شيء).

كيف أبحث في مصفوفة متعددة الأبعاد في PHP؟

استخرج الحقل إلى قائمة مسطحة وابحث فيها: $i = array_search('ada@example.com', array_column($users, 'email'));، ثم اقرأ الصف بـ $users[$i]. يعمل هذا عندما تكون الصفوف مرقمة 0, 1, 2؛ وإلا فمرّ بـ foreach.

رسم توضيحي للغات البرمجة في Coddy

تعلّم البرمجة مع Coddy

ابدأ الآن