Menu
Coddy logo textTech

検索機能

CoddyのPHPジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 85/91。

challenge icon

チャレンジ

簡単

検索機能を追加して、図書館管理システムを強化しましょう。ユーザーが特定のタイトルを探したり、著者でブラウズしたり、現在貸出可能な本を確認したりできるように、本を簡単に見つけられるようにする必要があります。

コードは以下の4つのファイルに分けて構成します:

  • Book.php — 読み取り専用プロパティ(isbntitleauthor)、初期値が true のプライベートプロパティ $isAvailable、およびメソッド isAvailable()markAsBorrowed()markAsReturned() を持つ Book クラス。
  • User.php — Book ファイルをインクルードします。読み取り専用プロパティ(idname)、プライベートな $borrowedBooks 配列、値が 3MAX_BOOKS 定数、およびメソッド getBorrowedBooks()canBorrow()addBook(Book $book)removeBook(string $isbn) を持つ User クラス。
  • Library.php — User ファイルをインクルードします。既存の機能に加えて、以下の3つの新しい検索メソッドを持つように Library クラスを拡張します:
    • searchByTitle(string $keyword): array — タイトルにキーワードが含まれるすべての本を返します(大文字と小文字を区別しません)。
    • searchByAuthor(string $author): array — 著者名に検索語が含まれるすべての本を返します(大文字と小文字を区別しません)。
    • getAvailableBooks(): array — 現在貸出可能な本のみを返します。

    大文字と小文字を区別しないマッチングには、アロー関数を用いた array_filterstripos を使用してください。stripos は一致が見つからない場合に false を返すため、!== false でチェックすることを忘れないでください。

  • main.php — Library ファイルをインクルードします。検索キーワードと著者名の2つの入力を受け取ります。

    Library インスタンスを作成し、以下の4冊の本を追加してください:

    • 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"

    IDが 1、名前が "TestUser"User を使用して、ISBN "978-1" の本を借ります。

    その後、以下の検索を実行し、結果を出力してください:

    1. 最初の入力を使用してタイトルで検索し、一致する各本のタイトルを新しい行に出力します。
    2. 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: 4冊の本をライブラリに追加する:
// 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" のユーザーを作成し、登録する

// TODO: ISBN "978-1" の本を借りる

// TODO: $searchKeyword を使用してタイトルで検索し、結果を表示する
echo "Title matches:\n";
// 一致する各本のタイトルを新しい行に表示する

// TODO: $authorName を使用して著者で検索し、件数を表示する
echo "Author matches: " . /* ここに件数 */ "\n";

// TODO: 利用可能な本を取得し、件数を表示する
echo "Available: " . /* ここに件数 */ "\n";

?>

オブジェクト指向プログラミングのすべてのレッスン