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

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

جزء من قسم Logic & Flow في رحلة PHP على Coddy — الدرس 43 من 68.

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

تتطلب الدالة ثلاثة معاملات: المصفوفة المراد معالجتها، ودالة استدعاء (callback function) تحدد كيفية دمج العناصر، وقيمة أولية اختيارية. تستقبل دالة الاستدعاء معاملين: النتيجة المتراكمة (تسمى "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 للحد الأقصى.

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

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

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

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

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

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

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

جرّب بنفسك

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

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

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


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

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

جميع دروس Logic & Flow