Menu
Coddy logo textTech

צמצום באמצעות 'array_reduce'

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-PHP של Coddy. שיעור 43 מתוך 68.

הפונקציה array_reduce() פועלת אחרת מהפונקציות array_map() ו־array_filter(). במקום להחזיר מערך חדש, היא מעבדת את כל האיברים במערך כדי להפיק ערך יחיד. לכן היא מתאימה במיוחד לפעולות כמו חישוב סכומים, מציאת הערכים המרביים או שילוב כל האיברים לתוצאה אחת.

הפונקציה דורשת שלושה פרמטרים: המערך לעיבוד, פונקציית callback שמגדירה כיצד לשלב בין איברים, וערך התחלתי אופציונלי. פונקציית ה-callback מקבלת שני פרמטרים: התוצאה המצטברת (שנקראת "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 מותאמת אישית שמבצעת את הפעולה שצוינה, השתמשו ב-array_reduce() עם פונקציית ה-callback שלכם וערך התחלתי מתאים כדי לעבד את כל המספרים לתוצאה יחידה, והדפיסו את התוצאה הסופית.

פרטי הפעולות:

  • S (סכום): חברו את כל המספרים (ערך התחלתי: 0)
  • P (מכפלה): הכפילו את כל המספרים (ערך התחלתי: 1)
  • M (מקסימום): מצאו את המספר הגדול ביותר (ערך התחלתי: המספר הראשון במערך או מספר קטן מאוד)

פונקציית ה-callback שלכם צריכה לקבל שני פרמטרים: התוצאה המצטברת (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 בהתאם לסוג הפעולה
// השתמשו ב-array_reduce() עם פונקציית ה-callback שלכם וערך התחלתי מתאים


// הציגו את התוצאה
echo $result;
?>
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר PHP אונליין