Menu
Coddy logo textTech

Suchfunktion

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

challenge icon

Aufgabe

Einfach

Erweitern wir unser Bibliotheksverwaltungssystem um eine Suchfunktion. Benutzer müssen Bücher leicht finden können, egal, ob sie nach einem bestimmten Titel suchen, nach Autor stöbern oder prüfen, welche Bücher derzeit ausgeliehen werden können.

Du organisierst deinen Code auf vier Dateien:

  • Book.php: Deine Klasse Book mit schreibgeschützten Eigenschaften (isbn, title, author), einer privaten Eigenschaft $isAvailable, die mit true beginnt, und den Methoden: isAvailable(), markAsBorrowed() und markAsReturned().
  • User.php: Binde die Book-Datei ein. Deine Klasse User mit schreibgeschützten Eigenschaften (id, name), einem privaten Array $borrowedBooks, einer Konstante MAX_BOOKS mit dem Wert 3 und den Methoden: getBorrowedBooks(), canBorrow(), addBook(Book $book) und removeBook(string $isbn).
  • Library.php: Binde die User-Datei ein. Erweitere deine Klasse Library um die bestehende Funktionalität sowie drei neue Suchmethoden:
    • searchByTitle(string $keyword): array: gibt alle Bücher zurück, deren Titel das Schlüsselwort enthält (ohne Beachtung der Groß- und Kleinschreibung)
    • searchByAuthor(string $author): array: gibt alle Bücher zurück, deren Autorenname den Suchbegriff enthält (ohne Beachtung der Groß- und Kleinschreibung)
    • getAvailableBooks(): array: gibt nur Bücher zurück, die derzeit zum Ausleihen verfügbar sind

    Verwende array_filter mit Pfeilfunktionen und stripos für die Suche ohne Beachtung der Groß- und Kleinschreibung. Denke daran, dass stripos false zurückgibt, wenn keine Übereinstimmung gefunden wurde. Prüfe daher auf !== false.

  • main.php: Binde die Library-Datei ein. Du erhältst zwei Eingaben: ein Suchschlüsselwort und einen Autorennamen.

    Erstelle eine Library und füge 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"

    Leihe das Buch mit der ISBN "978-1" mithilfe eines User mit der ID 1 und dem Namen "TestUser" aus.

    Führe anschließend diese Suchen durch und gib die Ergebnisse aus:

    1. Suche anhand des ersten Eingabewerts nach dem Titel und gib den Titel jedes passenden Buches in einer neuen Zeile aus
    2. Suche anhand des zweiten Eingabewerts nach dem Autor und gib die Anzahl der passenden Bücher aus
    3. Rufe die verfügbaren Bücher ab und gib die Anzahl aus

    Ausgabeformat:

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

Diese Aufgabe zeigt, wie array_filter in Kombination mit stripos eine leistungsfähige und benutzerfreundliche Suchfunktionalität ermöglicht. Dank der Suche ohne Beachtung der Groß- und Kleinschreibung müssen sich Benutzer bei der Suche keine Gedanken über die exakte Großschreibung machen.

Probier es selbst

<?php

require_once 'Library.php';

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

// TODO: Erstelle eine Library-Instanz

// TODO: Füge die vier Bücher zur Bibliothek 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", Title: "Web Development", Author: "Alice Brown"

// TODO: Erstelle einen User mit ID 1 und Namen "TestUser", registriere ihn

// TODO: Leihe das Buch mit ISBN "978-1" aus

// TODO: Suche nach Titel mit $searchKeyword und gib die Ergebnisse aus
echo "Title matches:\n";
// Gib den Titel jedes übereinstimmenden Buchs in einer neuen Zeile aus

// TODO: Suche nach Autor mit $authorName und gib die Anzahl aus
echo "Author matches: " . /* Anzahl hier */ "\n";

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

?>

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-PHP-Compiler