Menu
Coddy logo textTech

פונקציונליות חיפוש

חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 85 מתוך 91.

challenge icon

אתגר

קל

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

תארגנו את הקוד שלכם בארבעה קבצים:

  • Book.php: המחלקה Book שלכם, עם מאפיינים לקריאה בלבד (isbn, title, author), מאפיין פרטי $isAvailable שערכו ההתחלתי הוא true, והמתודות: isAvailable(), markAsBorrowed() ו-markAsReturned().
  • User.php: כללו את קובץ Book. המחלקה User שלכם, עם מאפיינים לקריאה בלבד (id, name), מערך פרטי $borrowedBooks, קבוע MAX_BOOKS שערכו 3, והמתודות: getBorrowedBooks(), canBorrow(), addBook(Book $book) ו-removeBook(string $isbn).
  • Library.php: כללו את קובץ User. הרחיבו את המחלקה Library שלכם, כך שתכלול את הפונקציונליות הקיימת וכן שלוש מתודות חיפוש חדשות:
    • searchByTitle(string $keyword): array: מחזירה את כל הספרים שהכותר שלהם מכיל את מילת המפתח (ללא תלות באותיות גדולות וקטנות)
    • searchByAuthor(string $author): array: מחזירה את כל הספרים ששם המחבר שלהם מכיל את מונח החיפוש (ללא תלות באותיות גדולות וקטנות)
    • getAvailableBooks(): array: מחזירה רק ספרים שזמינים כרגע להשאלה

    השתמשו ב-array_filter עם פונקציות חץ וב-stripos כדי לבצע התאמה ללא תלות באותיות גדולות וקטנות. זכרו ש-stripos מחזירה false כשלא נמצאה התאמה, ולכן בדקו באמצעות !== false.

  • main.php: כללו את קובץ Library. תקבלו שתי קלטים: מילת חיפוש ושם מחבר.

    צרו Library והוסיפו את ארבעת הספרים האלה:

    • ISBN: "978-0", כותר: "PHP Basics", מחבר: "John Smith"
    • ISBN: "978-1", כותר: "Advanced PHP", מחבר: "Jane Doe"
    • ISBN: "978-2", כותר: "Python Guide", מחבר: "John Smith"
    • ISBN: "978-3", כותר: "Web Development", מחבר: "Alice Brown"

    השאילו את הספר עם ISBN "978-1" באמצעות User עם מזהה 1 ושם "TestUser".

    לאחר מכן בצעו את החיפושים האלה והדפיסו את התוצאות:

    1. חפשו לפי כותר באמצעות הקלט הראשון והדפיסו את הכותר של כל ספר תואם בשורה חדשה
    2. חפשו לפי מחבר באמצעות הקלט השני והדפיסו את מספר הספרים התואמים
    3. קבלו את הספרים הזמינים והדפיסו את מספרם

    פורמט הפלט:

    Title matches:
    [title1]
    [title2]
    ...
    Author matches: [count]
    Available: [count]

האתגר הזה מדגים כיצד array_filter בשילוב עם stripos מאפשרים ליצור פונקציונליות חיפוש עוצמתית ונוחה למשתמש. ההתאמה ללא תלות באותיות גדולות וקטנות פירושה שהמשתמשים לא צריכים לדאוג לאותיות גדולות או קטנות מדויקות בעת החיפוש.

נסו בעצמכם

<?php

require_once 'Library.php';

// קראו את נתוני הקלט
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));

// TODO: צרו מופע של Library

// TODO: הוסיפו את ארבעת הספרים לספרייה:
// ISBN: "978-0", כותרת: "PHP Basics", מחבר: "John Smith"
// ISBN: "978-1", כותרת: "Advanced PHP", מחבר: "Jane Doe"
// ISBN: "978-2", כותרת: "Python Guide", מחבר: "John Smith"
// ISBN: "978-3", כותרת: "Web Development", מחבר: "Alice Brown"

// TODO: צרו User עם ID 1 והשם "TestUser", ורשמו אותו

// TODO: השאילו את הספר עם ISBN "978-1"

// TODO: חפשו לפי כותרת באמצעות $searchKeyword והדפיסו את התוצאות
echo "Title matches:\n";
// הדפיסו את הכותרת של כל ספר תואם בשורה חדשה

// TODO: חפשו לפי מחבר באמצעות $authorName והדפיסו את מספר התוצאות
echo "Author matches: " . /* מספר כאן */ "\n";

// TODO: קבל את הספרים הזמינים והדפס את מספרם
echo "Available: " . /* מספר כאן */ "\n";

?>

כל השיעורים ביחידה תכנות מונחה עצמים

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