מיון מותאם אישית באמצעות 'usort'
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-PHP של Coddy. שיעור 25 מתוך 68.
כאשר פונקציות המיון המובנות של PHP אינן עונות על הצרכים הספציפיים שלך, הפונקציה usort() מספקת גמישות מרבית בכך שהיא מאפשרת לך להגדיר בדיוק כיצד יש להשוות ולסדר את האיברים. הפונקציה מקבלת את המערך שלך ופונקציית השוואה מותאמת אישית שאתה כותב כדי לקבוע את לוגיקת המיון.
פונקציית ההשוואה מקבלת שני איברים מהמערך וחייבת להחזיר מספר שלם: מספר שלילי אם האיבר הראשון אמור להופיע לפני השני, אפס אם הם שווים, או מספר חיובי אם האיבר הראשון אמור להופיע אחרי השני.
<?php
function compareByLength($a, $b) {
return strlen($a) - strlen($b);
}
$words = ["elephant", "cat", "butterfly", "dog"];
usort($words, "compareByLength");
print_r($words);
// פלט: Array ( [0] => cat [1] => dog [2] => elephant [3] => butterfly )
?>בדוגמה הזאת, פונקציית ההשוואה מחשבת את ההפרש בין אורכי המחרוזות. כאשר strlen($a) - strlen($b) מחזירה מספר שלילי, פירוש הדבר שהמחרוזת הראשונה קצרה יותר וצריכה להופיע ראשונה במערך הממויין.
כמו פונקציות מיון אחרות ב-PHP, הפונקציה usort() משנה ישירות את המערך המקורי. הפונקציה העוצמתית הזאת פותחת אפשרויות למיון לפי כל קריטריון שתוכלו לדמיין, בין אם מדובר באורך מחרוזת, בלוגיקה עסקית מותאמת אישית או בהשוואות מורכבות של כמה שדות.
אתגר
קלתקבלו קלט אחד: מערך של מחירי מוצרים בפורמט JSON. קראו את הקלט, המירו את מחרוזת ה-JSON למערך, צרו פונקציית השוואה שממיינת את המחירים בסדר עולה, השתמשו ב-usort() עם פונקציית ההשוואה שלכם כדי למיין את המערך, והדפיסו את המערך הממויין באמצעות print_r().
פורמט הקלט: שורה אחת המכילה מערך JSON של מספרים (לדוגמה: [29.99,15.50,42.00,8.75,33.25])
הפלט הצפוי: המערך הממויין בסדר עולה לפי המחיר, מוצג באמצעות print_r()
נסו בעצמכם
<?php
// קרא את הקלט
$input = fgets(STDIN);
$prices = json_decode($input, true);
// TODO: צור פונקציית השוואה והשתמש ב-usort() כדי למיין את המערך
// הדפס את המערך הממוין
print_r($prices);
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1פונקציות מתקדמות
פונקציות אנונימיותסגירות ו-'use'פונקציות חץפונקציות callbackשימוש ב-'call_user_func'פונקציות משתנותהעברה באמצעות הפניהפונקציות רקורסיביותסיכום: מגוון פונקציות4מערכים רב־ממדיים
יצירת מערך דו־ממדיגישה לאיברי מערך דו־ממדישינוי איברי מערך דו־ממדימעבר באמצעות לולאות מקוננותמערכים אסוציאטיביים דו־ממדייםסיכום: תרגיל רשת פשוטה2מניפולציות מתקדמות במערכים
הוספה באמצעות 'array_push'הסרה באמצעות 'array_pop'הוספה לתחילת המערך באמצעות 'array_unshift'הסרה מתחילת המערך באמצעות 'array_shift'מיזוג מערכים ממוספריםמיזוג מערכים אסוציאטיבייםחילוץ באמצעות 'array_slice'בדיקת ערכים באמצעות 'in_array'חיפוש מפתחות באמצעות 'array_search'סיכום: תרגיל רשימת השמעה3מיון מערכים
מיון מערכים עם אינדקסים בסדר עולהמיון מערכים עם אינדקסים בסדר יורדמיון מערכים אסוציאטיביים לפי ערךמיון מערכים אסוציאטיביים לפי מפתחמיון בסדר טבעימיון מותאם אישית באמצעות 'usort'סיכום: מיון טבלת מוביליםתרגלו בעצמכם: קומפיילר PHP אונליין