Menu
Coddy logo textTech

Funcionalidad de búsqueda

Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy. Lección 85 de 91.

challenge icon

Desafío

Fácil

Mejoremos nuestro Sistema de Gestión de Bibliotecas añadiendo funcionalidad de búsqueda. Los usuarios necesitan encontrar libros fácilmente, ya sea que busquen un título específico, exploren por autor o comprueben qué está disponible actualmente para pedir prestado.

Organizarás tu código en cuatro archivos:

  • Book.php: Tu clase Book con propiedades de solo lectura (isbn, title, author), una propiedad privada $isAvailable que comienza como true y los métodos: isAvailable(), markAsBorrowed() y markAsReturned().
  • User.php: Incluye el archivo Book. Tu clase User con propiedades de solo lectura (id, name), un arreglo privado $borrowedBooks, una constante MAX_BOOKS con el valor 3 y los métodos: getBorrowedBooks(), canBorrow(), addBook(Book $book) y removeBook(string $isbn).
  • Library.php: Incluye el archivo User. Amplía tu clase Library con la funcionalidad existente y tres nuevos métodos de búsqueda:
    • searchByTitle(string $keyword): array: devuelve todos los libros cuyo título contiene la palabra clave (sin distinguir entre mayúsculas y minúsculas)
    • searchByAuthor(string $author): array: devuelve todos los libros cuyo nombre de autor contiene el término de búsqueda (sin distinguir entre mayúsculas y minúsculas)
    • getAvailableBooks(): array: devuelve únicamente los libros que están disponibles actualmente para pedir prestados

    Usa array_filter con funciones flecha y stripos para realizar coincidencias sin distinguir entre mayúsculas y minúsculas. Recuerda que stripos devuelve false cuando no encuentra ninguna coincidencia, así que comprueba que sea !== false.

  • main.php: Incluye el archivo Library. Recibirás dos entradas: una palabra clave de búsqueda y un nombre de autor.

    Crea una instancia de Library y añade estos cuatro libros:

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

    Pide prestado el libro con ISBN "978-1" usando un User con ID 1 y nombre "TestUser".

    Después, realiza estas búsquedas e imprime los resultados:

    1. Busca por título usando la primera entrada e imprime el título de cada libro coincidente en una línea nueva
    2. Busca por autor usando la segunda entrada e imprime la cantidad de libros coincidentes
    3. Obtén los libros disponibles e imprime la cantidad

    Formato de salida:

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

Este desafío demuestra cómo array_filter, combinado con stripos, crea una funcionalidad de búsqueda potente y fácil de usar. Las coincidencias sin distinguir entre mayúsculas y minúsculas hacen que los usuarios no tengan que preocuparse por usar exactamente las mismas mayúsculas al realizar una búsqueda.

Pruébalo tú mismo

<?php

require_once 'Library.php';

// Leer entradas
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));

// TODO: Crear una instancia de Library

// TODO: Añadir los cuatro libros a la biblioteca:
// ISBN: "978-0", Título: "PHP Basics", Autor: "John Smith"
// ISBN: "978-1", Título: "Advanced PHP", Autor: "Jane Doe"
// ISBN: "978-2", Título: "Python Guide", Autor: "John Smith"
// ISBN: "978-3", Title: "Web Development", Author: "Alice Brown"

// TODO: Crear un User con ID 1 y nombre "TestUser", registrarlo

// TODO: Prestar el libro con ISBN "978-1"

// TODO: Buscar por título usando $searchKeyword e imprimir los resultados
echo "Title matches:\n";
// Imprimir el título de cada libro coincidente en una nueva línea

// TODO: Buscar por autor usando $authorName e imprimir el conteo
echo "Author matches: " . /* conteo aquí */ "\n";

// TODO: Obtén los libros disponibles e imprime el conteo
echo "Available: " . /* conteo aquí */ "\n";

?>

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de PHP online