מיון בסדר טבעי
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-PHP של Coddy. שיעור 24 מתוך 68.
אף שפונקציות המיון הסטנדרטיות של PHP פועלות היטב ברוב המקרים, הן עלולות להפיק תוצאות בלתי צפויות בעת מיון מחרוזות שמכילות מספרים. הפונקציה natsort() פותרת את הבעיה באמצעות אלגוריתם של ״סדר טבעי״, שממיין מחרוזות באופן שבני אדם מצפים לו באופן טבעי.
עיינו בדוגמה הזאת עם שמות קבצים:
<?php
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// מיון רגיל באמצעות sort() מפיק: file1.txt, file10.txt, file2.txt, file20.txt
sort($files);
print_r($files);
// אפס את המערך
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// natsort() מפיק: file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);
?>ההבדל מכריע: sort() רגילה משווה מחרוזות תו אחר תו, ולכן "file10.txt" מופיע לפני "file2.txt" כי "1" מופיע לפני "2" ב-ASCII. עם זאת, natsort() מזהה את החלקים המספריים וממיינת אותם מספרית, כך ש-"file2.txt" מופיע לפני "file10.txt", כפי שהיית מצפה באופן טבעי.
בדומה לפונקציות מיון אחרות ב-PHP, natsort() משנה ישירות את המערך המקורי. לכן היא שימושית במיוחד לארגון רשימות קבצים, מספרי גרסאות או כל נתון שבו מחרוזות מכילות מספרים שיש למיין לפי ערכם המספרי ולא לפי סדר האלפבית.
אתגר
קלתקבלו קלט אחד: מערך של מספרי גרסאות תוכנה בפורמט JSON. קראו את הקלט, המירו את מחרוזת ה-JSON למערך, השתמשו ב-natsort() כדי למיין את מספרי הגרסאות בסדר טבעי, והדפיסו את המערך הממוין באמצעות print_r().
פורמט הקלט: שורה אחת המכילה מערך JSON של מחרוזות גרסאות (לדוגמה: ["v1.10","v1.2","v1.20","v1.3"])
הפלט הצפוי: המערך הממוין בסדר טבעי, המוצג באמצעות print_r()
נסו בעצמכם
<?php
// קרא את הקלט
$input = fgets(STDIN);
// המר מחרוזת JSON למערך
$versions = (array)json_decode($input, true);
// TODO: כתוב את הקוד שלך למטה כדי למיין את המערך באמצעות natsort()
// הצג את המערך הממוין
print_r($versions);
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
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 אונליין