ملخص: معالجة البيانات
جزء من قسم Logic & Flow في رحلة PHP على Coddy — الدرس 45 من 68.
التحدي
سهلستتلقى ثلاثة مدخلات: قائمة بأسماء الموظفين مفصولة بفاصلة، وقائمة بساعات عملهم المقابلة للأسبوع مفصولة بفاصلة، والحد الأدنى لساعات العمل. يحتوي المدخل الأول على الأسماء بتنسيق Alice,Bob,Charlie,Diana,Eve، ويحتوي المدخل الثاني على الساعات كأرقام بتنسيق 45,32,50,28,40، والمدخل الثالث هو الحد الأدنى لساعات العمل كرقم (مثال: 35).
اقرأ المدخلات الثلاثة وقم بتحويلها إلى مصفوفات مناسبة. أنشئ مصفوفة ترابطية (associative array) مدمجة حيث تكون أسماء الموظفين هي المفاتيح وساعات عملهم هي القيم. ثم قم بإجراء العمليات التالية باستخدام دوال المصفوفات عالية الرتبة (higher-order array functions):
- استخدم
array_filter()مع دالة استدعاء (callback function) مخصصة للاحتفاظ فقط بالموظفين الذين عملوا عند الحد الأدنى لساعات العمل أو أعلى منه. - استخدم
array_map()مع دالة استدعاء مخصصة لحساب أجر العمل الإضافي للموظفين الذين تم تصفيتهم (العمل الإضافي هو أي ساعات تزيد عن 40 ساعة، وتُدفع بمعدل 1.5 ضعف معدل 25 دولاراً للساعة للساعات العادية). - استخدم
array_reduce()مع دالة استدعاء مخصصة لحساب إجمالي أجر العمل الإضافي لجميع الموظفين الذين تم تصفيتهم.
اطبع النتائج بالتنسيق التالي:
- أولاً، اطبع اسم كل موظف مؤهل وأجر العمل الإضافي الخاص به في أسطر منفصلة بتنسيق
Name: $Amount(مقرباً إلى منزلتين عشريتين). - أخيراً، اطبع إجمالي أجر العمل الإضافي بتنسيق
Total: $Amount(مقرباً إلى منزلتين عشريتين).
تفاصيل الحساب:
- الساعات العادية (حتى 40 ساعة): 25 دولاراً للساعة.
- ساعات العمل الإضافي (أكثر من 40 ساعة): 37.50 دولاراً للساعة (بمعدل 1.5 ضعف).
- إذا عمل الموظف 40 ساعة أو أقل، فإن أجر العمل الإضافي الخاص به هو 0.00 دولار.
تنسيق المدخلات:
- السطر الأول: أسماء الموظفين مفصولة بفاصلة (مثال:
Alice,Bob,Charlie,Diana,Eve). - السطر الثاني: ساعات العمل مفصولة بفاصلة كأرقام (مثال:
45,32,50,28,40). - السطر الثالث: الحد الأدنى لساعات العمل كرقم (مثال:
35).
المخرجات المتوقعة: كل موظف مؤهل مع أجر العمل الإضافي الخاص به في أسطر منفصلة، يليه إجمالي أجر العمل الإضافي، مع تنسيق جميع المبالغ إلى منزلتين عشريتين.
جرّب بنفسك
<?php
// قراءة المدخلات
$names = explode(',', trim(fgets(STDIN)));
$hours = explode(',', trim(fgets(STDIN)));
$minHours = intval(trim(fgets(STDIN)));
// تحويل الساعات إلى أعداد صحيحة
$hours = array_map('intval', $hours);
// إنشاء مصفوفة ترابطية تجمع بين الأسماء والساعات
$employees = array_combine($names, $hours);
// TODO: اكتب الكود الخاص بك أدناه
// 1. استخدم array_filter() للاحتفاظ بالموظفين الذين عملوا لساعات تساوي أو تزيد عن الحد الأدنى
// 2. استخدم array_map() لحساب أجر العمل الإضافي للموظفين الذين تم تصفيتهم
// 3. استخدم array_reduce() لحساب إجمالي أجر العمل الإضافي
// طباعة النتائج
// طباعة أجر العمل الإضافي لكل موظف مؤهل
// طباعة إجمالي أجر العمل الإضافي
?>جميع دروس 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'ملخص: معالجة البيانات