'array_filter' مع دالة مخصصة
جزء من قسم المنطق وتدفق التنفيذ في رحلة PHP على Coddy. الدرس 42 من 68.
بينما تقوم array_filter() بدون دالة استدعاء (callback) بإزالة القيم الفارغة، فإن قوتها الحقيقية تظهر عندما توفر دالة استدعاء مخصصة. يتيح لك هذا تحديد العناصر التي يجب الاحتفاظ بها بالضبط بناءً على معاييرك الخاصة.
لاستخدام دالة مخصصة مع array_filter()، قم بتمرير اسم الدالة كمعامل ثانٍ. يجب أن تقبل دالة الاستدعاء (callback function) الخاصة بك معاملاً واحداً (عنصر المصفوفة الحالي) وتعيد true للاحتفاظ بالعنصر أو false لاستبعاده.
<?php
function isEven($number) {
return $number % 2 === 0;
}
$numbers = [1, 2, 3, 4, 5, 6, 7, 8];
$evenNumbers = array_filter($numbers, "isEven");
// النتيجة: [2, 4, 6, 8]
?>في هذا المثال، تقوم الدالة isEven باختبار كل رقم باستخدام معامل باقي القسمة (modulo). فقط الأرقام التي تُرجع true (الأرقام الزوجية) يتم تضمينها في النتيجة المصفاة. يمنحك هذا النهج تحكماً كاملاً في منطق التصفية، مما يجعل array_filter() متعددة الاستخدامات بشكل كبير لمهام معالجة البيانات.
التحدي
سهلستتلقى مدخلين: قائمة بأسعار المنتجات مفصولة بفاصلة، والحد الأدنى للسعر. يحتوي المدخل الأول على الأسعار كسلسلة نصية بتنسيق 15.99,45.00,8.50,120.00,22.75، والمدخل الثاني هو الحد الأدنى للسعر كرقم (مثال: 20).
اقرأ كلا المدخلين، وقم بتحويل الأسعار المفصولة بفاصلة إلى مصفوفة من الأرقام، وأنشئ دالة استدعاء (callback function) مخصصة تتحقق مما إذا كان السعر أكبر من أو يساوي الحد الأدنى، واستخدم array_filter() مع دالتك المخصصة للاحتفاظ فقط بالأسعار التي تستوفي الحد الأدنى، واطبع كل سعر تمت تصفيته في سطر منفصل بنفس ترتيب ظهورها.
يجب أن تقبل دالة الاستدعاء المخصصة معاملًا واحدًا (السعر) وتعيد true إذا كان السعر أكبر من أو يساوي الحد الأدنى، أو false خلاف ذلك.
تنسيق المدخلات:
- السطر الأول: أسعار المنتجات مفصولة بفاصلة (مثال:
15.99,45.00,8.50,120.00,22.75) - السطر الثاني: الحد الأدنى للسعر كرقم (مثال:
20)
المخرجات المتوقعة: طباعة كل سعر يستوفي الحد الأدنى أو يتجاوزه في سطر منفصل، مع الحفاظ على الترتيب الأصلي.
جرّب بنفسك
<?php
// قراءة المدخلات
$prices_input = trim(fgets(STDIN));
$threshold = floatval(fgets(STDIN));
// تحويل الأسعار المفصولة بفاصلة إلى مصفوفة
$prices = array_map('floatval', explode(',', $prices_input));
// TODO: اكتب الكود الخاص بك أدناه
// قم بإنشاء دالة callback مخصصة تتحقق مما إذا كان السعر >= threshold
// استخدم array_filter() مع دالتك المخصصة
// اطبع كل سعر تمت تصفيته في سطر منفصل
?>يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1الدوال المتقدمة
الدوال المجهولةالـ Closures وكلمة 'use'دوال السهمدوال الـ Callbackاستخدام 'call_user_func'دوال المتغيراتالتمرير بالمرجعالدوال العوديةمراجعة: مزيج الدوال4المصفوفات متعددة الأبعاد
إنشاء مصفوفة ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادتعديل عناصر المصفوفة ثنائية الأبعادالتكرار باستخدام الحلقات المتداخلةالمصفوفات الترابطية ثنائية الأبعادمراجعة: تمرين الشبكة البسيطة2معالجة المصفوفات المتقدمة
الإضافة باستخدام 'array_push'الحذف باستخدام 'array_pop'الإضافة باستخدام 'array_unshift'الحذف باستخدام 'array_shift'دمج المصفوفات المفهرسةدمج المصفوفات الترابطيةالاستخراج باستخدام 'array_slice'القيم باستخدام 'in_array'المفاتيح باستخدام 'array_search'مراجعة: تمرين قائمة التشغيل3ترتيب المصفوفات
ترتيب المصفوفات المفهرسة تصاعدياًترتيب المصفوفات المفهرسة تنازلياًترتيب المصفوفات الترابطية حسب القيمةترتيب المصفوفات الترابطية حسب المفتاحالترتيب بالترتيب الطبيعيالترتيب المخصص باستخدام 'usort'مراجعة: ترتيب لوحة المتصدرين6دوال المصفوفات من الرتبة العليا
التحويل باستخدام 'array_map''array_map' مع دالة مخصصةالتصفية باستخدام 'array_filter''array_filter' مع دالة مخصصةالاختزال باستخدام 'array_reduce'المرور عبر العناصر باستخدام 'array_walk'ملخص: معالجة البياناتتدرّب بنفسك: مترجم PHP عبر الإنترنت