Menu
Coddy logo textTech

검색 기능

Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 85번째.

challenge icon

챌린지

쉬움

검색 기능을 추가하여 도서 관리 시스템을 개선해 봅시다. 사용자는 특정 제목을 찾거나, 저자별로 검색하거나, 현재 대출 가능한 도서가 무엇인지 확인하는 등 도서를 쉽게 찾을 수 있어야 합니다.

코드는 다음 네 개의 파일로 구성됩니다:

  • Book.php — 읽기 전용 속성(isbn, title, author), 기본값이 true인 private $isAvailable 속성, 그리고 isAvailable(), markAsBorrowed(), markAsReturned() 메서드를 가진 Book 클래스입니다.
  • User.php — Book 파일을 포함합니다. 읽기 전용 속성(id, name), private $borrowedBooks 배열, 값이 3MAX_BOOKS 상수, 그리고 getBorrowedBooks(), canBorrow(), addBook(Book $book), removeBook(string $isbn) 메서드를 가진 User 클래스입니다.
  • Library.php — User 파일을 포함합니다. 기존 기능에 세 가지 새로운 검색 메서드를 추가하여 Library 클래스를 확장합니다:
    • searchByTitle(string $keyword): array — 제목에 키워드가 포함된 모든 도서를 반환합니다 (대소문자 구분 없음).
    • searchByAuthor(string $author): array — 저자 이름에 검색어가 포함된 모든 도서를 반환합니다 (대소문자 구분 없음).
    • getAvailableBooks(): array — 현재 대출 가능한 도서만 반환합니다.

    대소문자를 구분하지 않는 매칭을 위해 화살표 함수와 stripos를 사용한 array_filter를 활용하세요. stripos는 일치하는 항목이 없을 때 false를 반환하므로 !== false인지 확인해야 함을 기억하세요.

  • main.php — Library 파일을 포함합니다. 검색 키워드와 저자 이름이라는 두 개의 입력을 받습니다.

    Library 인스턴스를 생성하고 다음 네 권의 도서를 추가합니다:

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

    ID가 1이고 이름이 "TestUser"User를 사용하여 ISBN이 "978-1"인 도서를 대출합니다.

    그런 다음 아래 검색을 수행하고 결과를 출력합니다:

    1. 첫 번째 입력을 사용하여 제목으로 검색하고, 일치하는 각 도서의 제목을 새 줄에 출력합니다.
    2. 두 번째 입력을 사용하여 저자로 검색하고, 일치하는 도서의 수를 출력합니다.
    3. 대출 가능한 도서 목록을 가져와 그 수를 출력합니다.

    출력 형식:

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

이 챌린지는 array_filterstripos를 결합하여 강력하고 사용자 친화적인 검색 기능을 만드는 방법을 보여줍니다. 대소문자를 구분하지 않는 매칭 덕분에 사용자는 검색 시 정확한 대소문자 표기에 신경 쓸 필요가 없습니다.

직접 해보기

<?php

require_once 'Library.php';

// 입력 읽기
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));

// TODO: Library 인스턴스 생성

// TODO: 라이브러리에 다음 네 권의 도서 추가:
// ISBN: "978-0", Title: "PHP Basics", Author: "John Smith"
// ISBN: "978-1", Title: "Advanced PHP", Author: "Jane Doe"
// ISBN: "978-2", Title: "Python Guide", Author: "John Smith"
// ISBN: "978-3", Title: "Web Development", Author: "Alice Brown"

// TODO: ID가 1이고 이름이 "TestUser"인 User를 생성하고 등록

// TODO: ISBN이 "978-1"인 도서 대출

// TODO: $searchKeyword를 사용하여 제목으로 검색하고 결과 출력
echo "Title matches:\n";
// 검색된 각 도서의 제목을 새 줄에 출력

// TODO: $authorName을 사용하여 저자별로 검색하고 검색된 수 출력
echo "Author matches: " . /* 여기에 count */ "\n";

// TODO: 대출 가능한 도서 목록을 가져와서 그 수를 출력
echo "Available: " . /* 여기에 count */ "\n";

?>

객체 지향 프로그래밍의 모든 레슨