Menu
Coddy logo textTech

Funzionalità di ricerca

Fa parte della sezione Programmazione orientata agli oggetti del percorso PHP di Coddy. Lezione 85 di 91.

challenge icon

Sfida

Facile

Miglioriamo il nostro sistema di gestione della biblioteca aggiungendo funzionalità di ricerca. Gli utenti devono poter trovare facilmente i libri, sia che cerchino un titolo specifico, sfoglino i libri per autore o controllino quali sono attualmente disponibili per il prestito.

Organizzerai il codice in quattro file:

  • Book.php: la tua classe Book con proprietà readonly (isbn, title, author), una proprietà privata $isAvailable inizializzata a true e i metodi: isAvailable(), markAsBorrowed() e markAsReturned().
  • User.php: includi il file Book. La tua classe User con proprietà readonly (id, name), un array privato $borrowedBooks, una costante MAX_BOOKS con valore 3 e i metodi: getBorrowedBooks(), canBorrow(), addBook(Book $book) e removeBook(string $isbn).
  • Library.php: includi il file User. Estendi la tua classe Library con le funzionalità esistenti e tre nuovi metodi di ricerca:
    • searchByTitle(string $keyword): array: restituisce tutti i libri il cui titolo contiene la parola chiave (senza distinzione tra maiuscole e minuscole)
    • searchByAuthor(string $author): array: restituisce tutti i libri il cui autore contiene il termine di ricerca (senza distinzione tra maiuscole e minuscole)
    • getAvailableBooks(): array: restituisce solo i libri attualmente disponibili per il prestito

    Usa array_filter con funzioni freccia e stripos per la corrispondenza senza distinzione tra maiuscole e minuscole. Ricorda che stripos restituisce false quando non trova corrispondenze, quindi verifica con !== false.

  • main.php: includi il file Library. Riceverai due input: una parola chiave di ricerca e un nome di autore.

    Crea una Library e aggiungi questi quattro libri:

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

    Prendi in prestito il libro con ISBN "978-1" usando un User con ID 1 e nome "TestUser".

    Poi esegui queste ricerche e stampa i risultati:

    1. Cerca per titolo usando il primo input e stampa il titolo di ogni libro corrispondente su una nuova riga
    2. Cerca per autore usando il secondo input e stampa il numero di libri corrispondenti
    3. Ottieni i libri disponibili e stampa il numero

    Formato dell'output:

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

Questa sfida dimostra come array_filter combinato con stripos permetta di creare funzionalità di ricerca efficaci e intuitive. La corrispondenza senza distinzione tra maiuscole e minuscole fa sì che gli utenti non debbano preoccuparsi di usare le maiuscole esatte durante la ricerca.

Provalo tu

<?php

require_once 'Library.php';

// Leggi gli input
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));

// TODO: Crea un'istanza di Library

// TODO: Aggiungi i quattro libri alla biblioteca:
// ISBN: "978-0", Titolo: "PHP Basics", Autore: "John Smith"
// ISBN: "978-1", Titolo: "Advanced PHP", Autore: "Jane Doe"
// ISBN: "978-2", Titolo: "Python Guide", Autore: "John Smith"
// ISBN: "978-3", Titolo: "Web Development", Autore: "Alice Brown"

// TODO: Crea un User con ID 1 e nome "TestUser", poi registralo

// TODO: Prendi in prestito il libro con ISBN "978-1"

// TODO: Cerca per titolo usando $searchKeyword e stampa i risultati
echo "Title matches:\n";
// Stampa il titolo di ogni libro corrispondente su una nuova riga

// TODO: Cerca per autore usando $authorName e stampa il numero di risultati
echo "Author matches: " . /* conteggio qui */ "\n";

// TODO: Ottieni i libri disponibili e stampa il conteggio
echo "Available: " . /* conteggio qui */ "\n";

?>

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore PHP online