Menu
Coddy logo textTech

검색 기능

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

challenge icon

챌린지

쉬움

검색 기능을 추가하여 Library Management System을 개선해 보겠습니다. 사용자는 특정 제목을 찾거나, 저자별로 탐색하거나, 현재 대여 가능한 책을 확인할 때 책을 쉽게 찾을 수 있어야 합니다.

코드를 네 개의 파일로 나누어 구성합니다.

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

    대소문자를 구분하지 않는 일치 검색을 위해 화살표 함수와 함께 array_filter, stripos를 사용합니다. 일치하는 항목이 없으면 striposfalse를 반환하므로 !== 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: " . /* 여기에 개수 */ "\n";

// TODO: 사용 가능한 책들을 가져와 개수를 출력하세요
echo "Available: " . /* 여기에 개수 */ "\n";

?>

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

직접 연습해 보세요: 온라인 PHP 컴파일러