Menu
Coddy logo textTech

Funkcja wyszukiwania

Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 85 z 91.

challenge icon

Wyzwanie

Łatwy

Ulepszmy nasz system zarządzania biblioteką, dodając funkcję wyszukiwania. Użytkownicy muszą łatwo znajdować książki — niezależnie od tego, czy szukają konkretnego tytułu, przeglądają książki według autora, czy sprawdzają, które z nich są obecnie dostępne do wypożyczenia.

Rozmieścisz kod w czterech plikach:

  • Book.php: Twoja klasa Book z właściwościami tylko do odczytu (isbn, title, author), prywatną właściwością $isAvailable, której początkową wartością jest true, oraz metodami: isAvailable(), markAsBorrowed() i markAsReturned().
  • User.php: Dołącz plik Book. Twoja klasa User z właściwościami tylko do odczytu (id, name), prywatną tablicą $borrowedBooks, stałą MAX_BOOKS o wartości 3 oraz metodami: getBorrowedBooks(), canBorrow(), addBook(Book $book) i removeBook(string $isbn).
  • Library.php: Dołącz plik User. Rozbuduj swoją klasę Library, zachowując dotychczasową funkcjonalność i dodając trzy nowe metody wyszukiwania:
    • searchByTitle(string $keyword): array: zwraca wszystkie książki, których tytuł zawiera słowo kluczowe (bez rozróżniania wielkości liter)
    • searchByAuthor(string $author): array: zwraca wszystkie książki, których nazwisko autora zawiera wyszukiwany tekst (bez rozróżniania wielkości liter)
    • getAvailableBooks(): array: zwraca tylko książki, które są obecnie dostępne do wypożyczenia

    Użyj array_filter z funkcjami strzałkowymi i stripos do wyszukiwania bez rozróżniania wielkości liter. Pamiętaj, że stripos zwraca false, gdy nie znajdzie dopasowania, więc sprawdź, czy wynik to !== false.

  • main.php: Dołącz plik Library. Otrzymasz dwa dane wejściowe: słowo kluczowe do wyszukiwania i nazwisko autora.

    Utwórz obiekt Library i dodaj do niego te cztery książki:

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

    Wypożycz książkę o numerze ISBN "978-1", używając obiektu User o ID 1 i nazwie "TestUser".

    Następnie wykonaj te wyszukiwania i wyświetl wyniki:

    1. Wyszukaj według tytułu, używając pierwszego danych wejściowych, i wyświetl tytuł każdej pasującej książki w nowej linii
    2. Wyszukaj według autora, używając drugiego danych wejściowych, i wyświetl liczbę pasujących książek
    3. Pobierz dostępne książki i wyświetl ich liczbę

    Format wyjściowy:

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

To wyzwanie pokazuje, jak połączenie array_filter z stripos pozwala utworzyć zaawansowaną i przyjazną dla użytkownika funkcję wyszukiwania. Wyszukiwanie bez rozróżniania wielkości liter oznacza, że użytkownicy nie muszą zwracać uwagi na dokładną pisownię wielkimi i małymi literami.

Spróbuj swoich sił

<?php

require_once 'Library.php';

// Odczytaj dane wejściowe
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));

// TODO: Utwórz instancję Library

// TODO: Dodaj cztery książki do biblioteki:
// ISBN: "978-0", Tytuł: "PHP Basics", Autor: "John Smith"
// ISBN: "978-1", Tytuł: "Advanced PHP", Autor: "Jane Doe"
// ISBN: "978-2", Tytuł: "Python Guide", Autor: "John Smith"
// ISBN: "978-3", Tytuł: "Web Development", Autor: "Alice Brown"

// TODO: Utwórz instancję User z ID 1 i nazwą "TestUser", a następnie zarejestruj tego użytkownika

// TODO: Wypożycz książkę o ISBN "978-1"

// TODO: Wyszukaj według tytułu, używając $searchKeyword, i wypisz wyniki
echo "Title matches:\n";
// Wypisz tytuł każdej pasującej książki w osobnym wierszu

// TODO: Wyszukaj według autora, używając $authorName, i wypisz liczbę wyników
echo "Author matches: " . /* liczba tutaj */ "\n";

// TODO: Pobierz dostępne książki i wypisz ich liczbę
echo "Available: " . /* liczba tutaj */ "\n";

?>

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator PHP online