Menu
CoddyTech

الاختزال باستخدام 'array_reduce'

جزء من قسم المنطق وتدفق التنفيذ في رحلة PHP على Coddy. الدرس 43 من 68.

تتبع الدالة array_reduce() نهجًا مختلفًا عن array_map() وarray_filter(). فبدلًا من إرجاع مصفوفة جديدة، تعالج جميع العناصر في مصفوفة لإنتاج قيمة واحدة. وهذا يجعلها مثالية لعمليات مثل حساب المجاميع، والعثور على القيم القصوى، أو دمج جميع العناصر في نتيجة واحدة.

تأخذ الدالة المصفوفة المراد معالجتها ودالة رد نداء تحدد كيفية دمج العناصر، بالإضافة إلى مَعلمة ثالثة اختيارية: القيمة الأولية. وتتلقى دالة رد النداء مَعلمين: النتيجة المتراكمة (وتُسمى "carry") وعنصر المصفوفة الحالي.

<?php
function addNumbers($carry, $item) {
    return $carry + $item;
}

$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, "addNumbers", 0);
// النتيجة: 15
?>

في هذا المثال، تبدأ الدالة بقيمة ابتدائية مقدارها 0، ثم تستدعي addNumbers بشكل متكرر باستخدام المجموع الجاري وكل عنصر من عناصر المصفوفة. تستمر عملية التجميع هذه حتى تتم معالجة جميع العناصر، لتبقى لديك القيمة النهائية المختزلة.

challenge icon

التحدي

سهل

ستتلقى مُدخلين: قائمة أرقام مفصولة بفواصل ونوع العملية. يحتوي المُدخل الأول على أرقام كسلسلة نصية بالتنسيق 5,10,15,20,25، أما المُدخل الثاني فهو حرف واحد يحدد العملية: S للجمع، أو P للضرب، أو M لإيجاد القيمة العظمى.

اقرأ المُدخلين، وحوّل الأرقام المفصولة بفواصل إلى مصفوفة من الأعداد الصحيحة، وأنشئ دالة رد نداء مخصصة تنفذ العملية المحددة، واستخدم array_reduce() مع دالة رد النداء والقيمة الابتدائية المناسبة لمعالجة جميع الأرقام للحصول على نتيجة واحدة، ثم اطبع النتيجة النهائية.

تفاصيل العمليات:

  • S (الجمع): اجمع كل الأرقام (القيمة الابتدائية: 0)
  • P (الضرب): اضرب كل الأرقام بعضها في بعض (القيمة الابتدائية: 1)
  • M (القيمة العظمى): أوجد أكبر رقم (القيمة الابتدائية: أول رقم في المصفوفة أو رقم صغير جدًا)

يجب أن تقبل دالة رد النداء وسيطين: النتيجة المتراكمة (carry) وعنصر المصفوفة الحالي (item)، ثم تعيد القيمة المتراكمة المحدّثة وفقًا لنوع العملية.

تنسيق الإدخال:

  • السطر الأول: أرقام مفصولة بفواصل (مثال: 5,10,15,20,25)
  • السطر الثاني: نوع العملية - إما S أو P أو M (مثال: S)

المخرجات المتوقعة: رقم واحد يمثل نتيجة عملية الاختزال

جرّب بنفسك

<?php
// اقرأ المدخلات
$numbers_input = trim(fgets(STDIN));
$operation = trim(fgets(STDIN));

// حوّل السلسلة المفصولة بفواصل إلى مصفوفة من الأعداد الصحيحة
$numbers = array_map('intval', explode(',', $numbers_input));

// TODO: اكتب الكود الخاص بك أدناه
// أنشئ دالة رد نداء بناءً على نوع العملية
// استخدم array_reduce() مع دالة رد النداء الخاصة بك وقيمة ابتدائية مناسبة


// اطبع النتيجة
echo $result;
?>
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم PHP عبر الإنترنت