Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

خاصية البحث

جزء من قسم البرمجة كائنية التوجه في رحلة PHP على Coddy. الدرس 85 من 91.

challenge icon

التحدي

سهل

لنطوّر نظام إدارة المكتبة بإضافة 기능ة البحث. يحتاج المستخدمون إلى العثور على الكتب بسهولة، سواء كانوا يبحثون عن عنوان محدد، أو يتصفحون حسب المؤلف، أو يتحققون من الكتب المتاحة حاليًا للاستعارة.

ستنظّم التعليمات البرمجية عبر four ملفات:

  • Book.php: فئة Book الخاصة بك مع خصائص للقراءة فقط (isbn وtitle وauthor)، وخصيصة خاصة $isAvailable تبدأ بالقيمة true، والطرق: isAvailable() وmarkAsBorrowed() وmarkAsReturned().
  • User.php: ضمّن ملف Book. فئة User الخاصة بك مع خصائص للقراءة فقط (id وname)، ومصفوفة خاصة $borrowedBooks، وثابت MAX_BOOKS قيمته 3، والطرق: 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"

    استعر الكتاب الذي يحمل ISBN "978-1" باستخدام User ذي المعرّف 1 والاسم "TestUser".

    ثم نفّذ عمليات البحث التالية واطبع النتائج:

    1. ابحث حسب العنوان باستخدام المُدخل الأول، واطبع عنوان كل كتاب مطابق في سطر جديد
    2. ابحث حسب المؤلف باستخدام المُدخل الثاني، واطبع عدد الكتب المطابقة
    3. احصل على الكتب المتاحة واطبع العدد

    تنسيق الإخراج:

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

يوضّح هذا التحدي كيف ينشئ array_filter، عند دمجه مع stripos، وظيفة بحث قوية وسهلة الاستخدام للمستخدم. تعني المطابقة مع تجاهل حالة الأحرف أن المستخدمين لا يحتاجون إلى القلق بشأن الكتابة بالأحرف الكبيرة أو الصغيرة بشكل مطابق تمامًا عند البحث.

جرّب بنفسك

<?php

require_once 'Library.php';

// اقرأ المدخلات
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));

// TODO: أنشئ مثيلاً من Library

// TODO: أضف الكتب الأربعة إلى المكتبة:
// ISBN: "978-0", العنوان: "PHP Basics", المؤلف: "John Smith"
// ISBN: "978-1", العنوان: "Advanced PHP", المؤلف: "Jane Doe"
// ISBN: "978-2", العنوان: "Python Guide", المؤلف: "John Smith"
// ISBN: "978-3", Title: "Web Development", Author: "Alice Brown"

// TODO: أنشئ User بالمعرّف 1 والاسم "TestUser"، وسجّله

// TODO: استعر الكتاب ذو ISBN "978-1"

// TODO: ابحث حسب العنوان باستخدام $searchKeyword واطبع النتائج
echo "Title matches:\n";
// اطبع عنوان كل كتاب مطابق في سطر جديد

// TODO: ابحث حسب المؤلف باستخدام $authorName واطبع العدد
echo "Author matches: " . /* العدد هنا */ "\n";

// TODO: احصل على الكتب المتاحة واطبع العدد
echo "Available: " . /* العدد هنا */ "\n";

?>

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم PHP عبر الإنترنت