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 بشكل متكرر مع المجموع الجاري وكل عنصر من عناصر المصفوفة. تستمر عملية التراكم هذه حتى تتم معالجة جميع العناصر، مما يترك لك القيمة النهائية المختزلة.

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

challenge icon

التحدي

سهل

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

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

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

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

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

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

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

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

ورقة مرجعية

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

تتطلب هذه الدالة ثلاثة معاملات: المصفوفة المراد معالجتها، ودالة استدعاء (callback function)، وقيمة أولية اختيارية. تستقبل دالة الاستدعاء النتيجة المتراكمة (carry) والعنصر الحالي في المصفوفة.

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

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

استخدم number_format($total, 2) لتنسيق النتائج إلى منزلتين عشريتين.

جرّب بنفسك

<?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