צמצום באמצעות '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)
הפלט הצפוי: מספר יחיד המייצג את תוצאת פעולת הצמצום
נסו בעצמכם
<?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 אונליין