Menu
Coddy logo textTech

Suchfunktionalität

Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 85 von 91.

challenge icon

Aufgabe

Einfach

Lassen Sie uns unser Bibliotheksverwaltungssystem erweitern, indem wir eine Suchfunktion hinzufügen. Benutzer müssen Bücher leicht finden können, egal ob sie nach einem bestimmten Titel suchen, nach Autoren stöbern oder prüfen, was derzeit zum Ausleihen verfügbar ist.

Sie werden Ihren Code über vier Dateien organisieren:

  • Book.php — Ihre Book-Klasse mit Readonly-Eigenschaften (isbn, title, author), einer privaten $isAvailable-Eigenschaft, die als true beginnt, und den Methoden: isAvailable(), markAsBorrowed() und markAsReturned().
  • User.php — Binden Sie die Book-Datei ein. Ihre User-Klasse mit Readonly-Eigenschaften (id, name), einem privaten $borrowedBooks-Array, einer MAX_BOOKS-Konstante von 3 und den Methoden: getBorrowedBooks(), canBorrow(), addBook(Book $book) und removeBook(string $isbn).
  • Library.php — Binden Sie die User-Datei ein. Erweitern Sie Ihre Library-Klasse um die bestehende Funktionalität plus drei neue Suchmethoden:
    • searchByTitle(string $keyword): array — gibt alle Bücher zurück, bei denen der Titel das Schlüsselwort enthält (Groß-/Kleinschreibung ignorieren)
    • searchByAuthor(string $author): array — gibt alle Bücher zurück, bei denen der Autorenname den Suchbegriff enthält (Groß-/Kleinschreibung ignorieren)
    • getAvailableBooks(): array — gibt nur Bücher zurück, die derzeit zum Ausleihen verfügbar sind

    Verwenden Sie array_filter mit Arrow-Functions und stripos für den case-insensitiven Abgleich. Denken Sie daran, dass stripos den Wert false zurückgibt, wenn keine Übereinstimmung gefunden wird, prüfen Sie also auf !== false.

  • main.php — Binden Sie die Library-Datei ein. Sie erhalten zwei Eingaben: ein Suchschlüsselwort und einen Autorennamen.

    Erstellen Sie eine Library und fügen Sie diese vier Bücher hinzu:

    • ISBN: "978-0", Titel: "PHP Basics", Autor: "John Smith"
    • ISBN: "978-1", Titel: "Advanced PHP", Autor: "Jane Doe"
    • ISBN: "978-2", Titel: "Python Guide", Autor: "John Smith"
    • ISBN: "978-3", Titel: "Web Development", Autor: "Alice Brown"

    Leihen Sie das Buch mit der ISBN "978-1" unter Verwendung eines User mit der ID 1 und dem Namen "TestUser" aus.

    Führen Sie dann diese Suchvorgänge durch und geben Sie die Ergebnisse aus:

    1. Suchen Sie nach dem Titel unter Verwendung der ersten Eingabe und geben Sie den Titel jedes passenden Buches in einer neuen Zeile aus
    2. Suchen Sie nach dem Autor unter Verwendung der zweiten Eingabe und geben Sie die Anzahl der passenden Bücher aus
    3. Rufen Sie die verfügbaren Bücher ab und geben Sie die Anzahl aus

    Ausgabeformat:

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

Diese Herausforderung zeigt, wie array_filter in Kombination mit stripos eine leistungsstarke, benutzerfreundliche Suchfunktion erstellt. Der case-insensitive Abgleich bedeutet, dass sich Benutzer bei der Suche keine Gedanken über die exakte Groß- und Kleinschreibung machen müssen.

Probier es selbst

<?php

require_once 'Library.php';

// Eingaben lesen
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));

// TODO: Eine Library-Instanz erstellen

// TODO: Die vier Bücher zur Bibliothek hinzufügen:
// ISBN: "978-0", Titel: "PHP Basics", Autor: "John Smith"
// ISBN: "978-1", Titel: "Advanced PHP", Autor: "Jane Doe"
// ISBN: "978-2", Titel: "Python Guide", Autor: "John Smith"
// ISBN: "978-3", Titel: "Web Development", Autor: "Alice Brown"

// TODO: Einen Benutzer mit der ID 1 und dem Namen "TestUser" erstellen und registrieren

// TODO: Das Buch mit der ISBN "978-1" ausleihen

// TODO: Nach Titel suchen unter Verwendung von $searchKeyword und Ergebnisse ausgeben
echo "Title matches:\n";
// Jeden Titel des passenden Buches in einer neuen Zeile ausgeben

// TODO: Nach Autor suchen unter Verwendung von $authorName und die Anzahl ausgeben
echo "Author matches: " . /* Anzahl hier */ "\n";

// TODO: Verfügbare Bücher abrufen und die Anzahl ausgeben
echo "Available: " . /* Anzahl hier */ "\n";

?>

Alle Lektionen in Objektorientierte Programmierung