التحويل باستخدام 'array_map'
جزء من قسم Logic & Flow في رحلة PHP على Coddy — الدرس 39 من 68.
تُعد دالة array_map() أداة قوية تقوم بتحويل كل عنصر في مصفوفة عبر تطبيق دالة استدعاء (callback function) على كل عنصر منها. وعلى عكس الدوال التي تعدل المصفوفة الأصلية، تقوم array_map() بإنشاء وإرجاع مصفوفة جديدة تماماً تحتوي على القيم المحولة.
تتطلب الصيغة الأساسية معاملين: أولاً، دالة الاستدعاء (callback function) التي تريد تطبيقها، وثانياً، المصفوفة التي تريد تحويلها. تمتلك لغة PHP العديد من الدوال المدمجة التي تعمل بشكل مثالي كدوال استدعاء مع array_map().
<?php
$names = ["alice", "bob", "charlie"];
$uppercaseNames = array_map("strtoupper", $names);
// النتيجة: ["ALICE", "BOB", "CHARLIE"]
?>في هذا المثال، يتم تطبيق strtoupper على كل عنصر في مصفوفة $names. تظل المصفوفة الأصلية دون تغيير، بينما يحتوي $uppercaseNames على النتائج المحولة. وهذا يجعل array_map() مثالية عندما تحتاج إلى معالجة البيانات دون فقدان القيم الأصلية.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلستتلقى مدخلين: قائمة بأسعار المنتجات مفصولة بفاصلة، ونسبة الخصم. يحتوي المدخل الأول على الأسعار كسلسلة نصية بتنسيق 19.99,25.50,12.75,8.00، والمدخل الثاني هو نسبة الخصم كرقم (مثال: 15).
اقرأ كلا المدخلين، وقم بتحويل الأسعار المفصولة بفاصلة إلى مصفوفة من الأرقام، ثم طبق نسبة الخصم على كل سعر باستخدام array_map() مع دالة floatval المدمجة للتحويل وعملية حسابية للخصم، واطبع كل سعر بعد الخصم في سطر منفصل، مقرباً إلى منزلتين عشريتين.
لحساب السعر بعد الخصم: اضرب السعر الأصلي في (100 - discount) / 100.
تنسيق المدخلات:
- السطر الأول: أسعار المنتجات مفصولة بفاصلة (مثال:
19.99,25.50,12.75,8.00) - السطر الثاني: نسبة الخصم كرقم (مثال:
15)
المخرجات المتوقعة: طباعة كل سعر بعد الخصم في سطر منفصل، مقرباً إلى منزلتين عشريتين (مثال: 16.99، 21.68، 10.84، 6.80)
ورقة مرجعية
تقوم الدالة array_map() بتحويل كل عنصر في مصفوفة من خلال تطبيق دالة استدعاء (callback function) على كل عنصر منها. وهي تنشئ وتُرجع مصفوفة جديدة بالقيم المحولة، مع ترك المصفوفة الأصلية دون تغيير.
الصيغة الأساسية مع دالة مدمجة:
<?php
$names = ["alice", "bob", "charlie"];
$uppercaseNames = array_map("strtoupper", $names);
// النتيجة: ["ALICE", "BOB", "CHARLIE"]
?>تأخذ الدالة معاملين: دالة الاستدعاء والمصفوفة المراد تحويلها. يمكنك استخدام دوال PHP المدمجة أو الدوال المجهولة (anonymous functions) كدوال استدعاء.
جرّب بنفسك
<?php
// قراءة المدخلات
$prices_input = trim(fgets(STDIN));
$discount = floatval(fgets(STDIN));
// تحويل الأسعار المفصولة بفواصل إلى مصفوفة
$prices = explode(',', $prices_input);
// TODO: اكتب الكود الخاص بك أدناه
// استخدم array_map() لتطبيق الخصم على كل سعر
// عرض كل سعر بعد الخصم في سطر منفصل
?>يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
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'ملخص: معالجة البيانات