צמצום באמצעות '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 עם הסכום המצטבר ועם כל איבר במערך. תהליך הצבירה הזה נמשך עד שכל האיברים עובדו, ובסופו נשאר לך הערך הסופי המצומצם.
אתגר
קליתקבלו שתי קלטים: רשימת מספרים מופרדת בפסיקים וסוג פעולה. הקלט הראשון מכיל מספרים כמחרוזת בפורמט 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;
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1פונקציות מתקדמות
פונקציות אנונימיותסגירות ו-'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'סיכום: עיבוד נתוניםתרגלו בעצמכם: קומפיילר PHP אונליין