검색 기능
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 85번째.
챌린지
쉬움검색 기능을 추가하여 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배열,3인MAX_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를 사용합니다. 일치하는 항목이 없으면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"인 책을 대여합니다.그런 다음 다음 검색을 수행하고 결과를 출력합니다.
- 첫 번째 입력을 사용하여 제목으로 검색하고, 일치하는 각 책의 제목을 새 줄에 하나씩 출력합니다.
- 두 번째 입력을 사용하여 저자로 검색하고, 일치하는 책의 개수를 출력합니다.
- 대여 가능한 책을 가져오고 그 개수를 출력합니다.
출력 형식:
Title matches: [title1] [title2] ... Author matches: [count] Available: [count]- ISBN:
이 챌린지는 array_filter를 stripos와 결합하여 강력하고 사용자 친화적인 검색 기능을 만드는 방법을 보여줍니다. 대소문자를 구분하지 않고 일치시키므로 사용자는 검색할 때 정확한 대문자 및 소문자 표기를 걱정할 필요가 없습니다.
직접 해보기
<?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 컴파일러