قائمة طعام
مجاني
التسجيل
الصفحة الرئيسية  /  البرامج الثابتة/ أي بحث php p. كيفية عمل خوارزمية بحث لعدة كلمات في PHP من قاعدة بيانات

أي بحث php p. كيفية عمل خوارزمية بحث لعدة كلمات في PHP من قاعدة بيانات

أولاً ، نحتاج إلى إنشاء قائمة بالملفات التي سنبحث فيها عن الكلمة المطلوبة أو مجموعة من عدة كلمات. للقيام بذلك ، قم بإنشاء ملف files.dat بأسماء الملفات التي سيتم إجراء البحث فيها.

كمثال: file1.txt dir1 / file2.txt dir2 / file3.txt ... dirn / filen.txt

يمكنك استخدام الوظائف التالية للبحث: ereg و eregi وكذلك وظائف البحث التعبيرات العاديةوتحولاتها ereg_replace و eregi_replace. يختلف إيريج عن إيريجى فقط من حيث أن الأول يبحث عن حالة غير حساسة ، بينما يأخذها الأخير فى الاعتبار. ولكن لأننا سنبحث في النص أو ملفات htmlيفضل أن نستخدم تمييز كلمات البحث في نتيجة الإخراج ، كما يفعل الكثيرون محركات البحث، ولهذا سوف نستخدم الوظيفتين الأخيرتين ، أي ereg_replace و eregi_replace.

للعثور على حدوث كلمة في سلسلة ، وهي الطريقة التي سنقدم بها ملفاتنا إلى وظيفة البحث ، نحتاج إلى تكوين التعبير العادي الصحيح ، أي كيف يمكن تجميع استعلام بواسطة الدالتين ereg_replace و eregi_replace. للقيام بذلك ، تحتاج إلى دراسة بناء جملة التعبيرات العادية قليلاً ، ولكن يمكنك القيام بذلك في وقت فراغك ، وفي هذه الحالة سيكون شيئًا من هذا القبيل: " \0 "، على سبيل المثال ، استخدمت العلامات هنا ولتمييز الكلمات التي تم العثور عليها ، يمكنك استخدام أي علامات أخرى. نتيجة لذلك ، ستبدو وظيفتنا على النحو التالي في الوقت الحالي:

// $ text - النص الذي نبحث فيه // $ search_text - كلمات البحث // $ use_register - استخدم البحث عن وظيفة الحالة ($ text ، $ search_text ، $ use_register = false) (if ($ use_register) // if case- حساس (إرجاع ereg_replace ($ search_text، " \0"، $ text)؛ // search، replace، return) else // إذا لم تكن حساسة لحالة الأحرف (إرجاع eregi_replace ($ search_text،" \0"، $ text)؛ // search، replace، return) إرجاع $ result؛ // فقط في حالة)

يمكنك أيضًا كتابة دالة أخرى لقراءة الملف (يمكنك استخدامها كمسار URL للملف) في السطر:

// $ url = ~ "http://sitename.ru filename /" ؛ // أو // $ url = ~ "ftp: // المستخدم: [البريد الإلكتروني محمي]/ filename "؛ // or // $ url = ~" filename "؛ الوظيفة Remote_file_read ($ url) ($ text =" "؛ $ file =fopen ($ url،" r ")؛ if (! $ file) (إرجاع "-1" ؛ صدى "EROR" ؛ // يمكنك حذف الخروج ؛) بينما (! feof (ملف $)) ($ line = fgets ($ file، 1024)؛ $ text. = $ line؛) fclose (ملف $) ؛ إرجاع النص $ ؛)

كتبنا وظيفة البحث ، والآن يبقى كتابة رمز البحث ، سيبدو مثل هذا:

$ files_file = "files.dat" ؛ obrezanie دولار = 100 ؛ // قص السلسلة حسب الطول // $ text - النص الذي نبحث فيه // $ search_text - كلمات البحث // $ use_register - باستخدام بحث دالة الحالة ($ text ، $ search_text ، $ use_register = false) (if ($ $ use_register) (إرجاع ereg_replace ($ search_text، " \0"، $ text)؛) else (return eregi_replace ($ search_text،" \0"، $ text)؛) إرجاع" "؛) الوظيفة Remote_file_read ($ url) ($ text =" "؛ [البريد الإلكتروني محمي]($ url، "r")؛ if (! $ file) (إرجاع "READ EROR" ؛ خروج ؛) بينما (! feof (ملف $)) ($ line = fgets ($ file، 1024)؛ $ text. = $ line؛) fclose ($ file) ؛ إرجاع نص $؛ ) دالة Cut_string ($ text، $ search_text) // وظيفة قص النص (global $ obrezanie؛ $ p = strpos ($ text، " ". search_text."") ؛ $ p = $ p- $ obrezanie ؛ إذا ($ p<0) $p=0; $text=substr($text,$p,$obrezanie*2+strlen("". search_text.""))؛ return $ text؛) // عرض صدى نموذج البحث"

ما الذي تبحث عنه:

كيفية البحث:

حساسية الموضوع
حالة الأحرف

"؛ if (isset ($ Search_text)) // إذا تم تحديد كلمة البحث ، فتابع ($ found = false ؛ if (! isset ($ type)) $ type = 1 ؛ // تحقق من نوع البحث إذا ( $ type = = 0) $ use_register = صحيح ؛ وإلا $ use_register = false ؛ $ file = file ($ files_file) ؛ $ count = count ($ file) ؛ لـ ($ i = 0 ؛ $ i<$count ; $i++) // Проходим по всем файлам указанным в files.dat { $def_text=htmlspecialchars(Remote_file_read(trim($file[$i]))); $return_text=search($def_text,$Search_text,$use_register); if ($def_text!==$return_text) { echo "

".trim (ملف $ [$ i])."

"؛ echo Cut_string ($ return_text، $ Search_text)؛ echo"
افتح هذه الصفحة "؛ صدى"


"; } } }

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

إذا كنت تريد أن تأخذ في الاعتبار الكلمات المضمنة بين علامتي اقتباس ، فأنت بحاجة إلى تعبير عادي مثل هذا:

$ search_expression = "آبل بير \" توم كروز \ "أو" ميكي ماوس "كلمة أخرى"؛ $ Words = preg_split ("/ [\ s،] * \\\" ([^ \\\ "] +) \\\" [\ s،] * | "." [\ s،] * "([ ^ "] +)" [\ s،] * | "." [\ s،] + / "، $ search_expression، 0، PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) ؛ print_r (الكلمات $) ؛

ستتلقى كلمات وعبارات فردية بين علامتي اقتباس

لقد طُلب مني بالفعل عدة مرات لكتابة مقال عن كيفية تنفيذ البحث في الموقع من خلال PHP... هذه ليست مهمة سهلة ، بل أقول إنها صعبة للغاية ، نظرًا لوجود عدد كبير من الفروق الدقيقة والعقبات هنا. في هذه المقالة سوف أقوم بتحليل خوارزمية البحث في الموقع.

لنفترض أن موقعنا يحتوي على الكثير من المواد المختلفة (المقالات والأخبار والملاحظات وما إلى ذلك). كل هذه الأشياء موجودة في قاعدة البيانات. ومهمتنا هي إجراء بحث على الموقع... أبسط خوارزمية كما يلي:

  1. إنشاء شكل HTMLمع شريط بحث وزر " يقدم". في مربع النص ، سيدخل المستخدمون استعلام بحث ، ثم ينقرون على الزر.
  2. احصل على استعلام بحث (يتم إرساله عادةً بواسطة الطريقة احصل على، ولكن في بعض الأحيان يستخدمون أيضًا بريد) ، وكذلك للحماية منها XSS، قم بتمريرها من خلال الوظيفة htmlspecialchars ().
  3. حدد من الجداول ذات الصلة (بالمقالات والأخبار والملاحظات وما إلى ذلك) تلك السجلات التي تحتوي على استعلام البحث. أعرض مثالاً لاستعلام SQL لمثل هذه الحالات: حدد * من المقالات حيث `text_article` مثل٪ search٪ وفقًا لذلك ، بدلاً من بحثتم استبدال سلسلة البحث.
  4. بعد استلام السجلات ، نعرضها بالشكل المطلوب ، ويفضل أن يكون ذلك من حيث الصلة. على سبيل المثال ، قمت بعمله على موقعي على النحو التالي: حيث توجد معظم الصدف - هذه المقالة أكثر صلة ، لذلك أضعها أولاً. على الأرجح ، هذه الطريقة في تقييم الملاءمة هي أيضًا مناسبة لك.

سيقول الكثير منكم أنه لا يوجد شيء معقد هنا. وسيكونون على حق جزئيًا ، ومع ذلك ، فلنلقِ نظرة على هذا المثال لسلسلة البحث: " أبحث عن هذا النص". السؤال هو:" وما الذي يتم البحث عنه في الواقع؟". إما أن يتم البحث في المطابقة التامة للنص." أبحث عن هذا النص". أو ربما تبحث عن نص توجد فيه الكلمات الثلاث جميعها ، ولكن قد لا يتبع بعضها البعض. أو ربما تبحث عن نص توجد فيه واحدة على الأقل من هذه الكلمات.

وهنا تصبح المهمة أكثر تعقيدًا. يمكنك إنشاء نظام بناء جملة معقد (كما هو الحال في محركات البحث) ، على سبيل المثال ، يتم البحث عن مطابقة تامة إذا تم تحديد الاستعلام بين علامتي اقتباس. أو يمكنك منح المستخدمين خيارًا بشأن الطريقة التي يريدون البحث بها (باستخدام أزرار الاختيار). وبالتالي ، يتم ذلك على موقع الويب الخاص بي. لذلك ، يتم إضافة عنصر آخر إلى الخوارزمية السابقة: يؤلف استعلام SQL... فيما يلي مثال على استعلام SQL ، عندما تحتاج إلى سحب جميع المواد التي تحتوي على كلمة واحدة على الأقل من الاستعلام " أبحث عن هذا النص":

حدد * من المقالات حيث (`text_article` LIKE"٪ يبحث عن٪ "OR` text_article` LIKE"٪ this٪ "أو` text_article` LIKE "٪ text٪")

وفقًا لذلك ، في نص البحث يجب أن تولد متشابهًا استعلامات SQLوإرسالها إلى قاعدة البيانات واستلام الرد وإخراجها. يصبح هذا الأمر أكثر تعقيدًا إذا كنت تعرض منشورات حسب الصلة ، حيث يصعب على الفور معرفة أيها يجب أن يكون أكثر صلة: 3 التكرارات الدقيقة للاستعلام ، أو 10 تكرارات أجزاء من الطلب. على موقعي ، يتم دائمًا إعطاء الأفضلية للوقائع الدقيقة ، ولكن هذه النقطة مثيرة للجدل بالفعل. بالطبع ، هذا صعب ، وإذا قمت بذلك لأول مرة ، فستقضي بالتأكيد عدة ساعات. أمل لي خوارزمية لتنفيذ البحث في الموقع من خلال PHPسوف يساعدك.

(PHP 4> = 4.0.5، PHP 5)

array_search - عمليات البحث قيمة معينةفي مصفوفة وإرجاع المفتاح المقابل عند النجاح

وصف

مختلط مجموعة_البحث(إبرة مختلطة ، كومة قش مصفوفة [، منطقي صارم])

يبحث في كومة قش عن إبرة ويعيد المفتاح ، إذا كان موجودًا في المصفوفة ، خاطئةخلاف ذلك.

تعليق:إذا كانت الإبرة عبارة عن سلسلة ، يتم إجراء مقارنة حساسة لحالة الأحرف.

تعليق:قبل إصدار PHP 4.2.0 ، مجموعة_البحث ()عاد عند الفشل باطلبدلا من خاطئة .

إذا قمت بتمرير القيمة حقيقيةكمعامل ثالث اختياري صارم ، الوظيفة مجموعة_البحث ()سيتحقق أيضًا من وجود الإبرة في مجموعة كومة قش.

إذا ظهرت الإبرة أكثر من مرة في كومة القش ، فسيتم إرجاع المفتاح الأول الذي تم العثور عليه. لإرجاع المفاتيح لجميع القيم التي تم العثور عليها ، استخدم الوظيفة array_keys ()مع معلمة اختيارية search_value.


مثال 1. مثال على الاستخدام مجموعة_البحث ()

$ array = array (0 => "blue"، 1 => "red"، 2 => 0x000000، 3 => "green"، 4 => "red")؛ $ key = array_search ("red"، $ array ) ؛ // $ key = 1 ؛
$ key = array_search ("green"، $ array)؛ // $ key = 2 ؛ (0x000000 == 0 == "أخضر")
$ key = array_search ("green"، $ array، true)؛ // $ key = 3 ؛
?>
انتباه

يمكن إرجاع هذه الوظيفة كقيمة منطقية خاطئةوقيمة غير منطقية يتم إلقاؤها خاطئة، على سبيل المثال 0 أو "". للمزيد من معلومات مفصلةراجع قسم النوع المنطقي. استخدم عامل التشغيل === لاختبار قيمة الإرجاع لهذه الوظيفة.

أفضل طريقة لإبقاء المستخدم على الموقع هي السماح له بالعثور على ما يبحث عنه. إذا قمت بإنشاء نظام مناسب لهذا ، فسوف ينمو مستوى التفضيل لموقعك وسيعود المستخدم بالتأكيد للعثور على ما يثير اهتمامه.

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

سوف أقوم بإنشاء ملفين: search.php يحتويان على HTML و JavaScript. سيحتوي الملف الثاني do_search.php على كود PHP. لنبدأ في إنشاء الملف الأول:

PHP، jQuery search demo

حاول كتابة كلمة أياكس


نتائج

في هذا الملف ، قمنا بإنشاء ملف شكل HTMLالذي يرسل طلب POST إلى ملف النهاية الخلفية do_search.php.

select_list ($ sql) ؛ if (count ($ row)) ($ end_result = ""؛ foreach ($ row as $ r) ($ result = $ r ["title"]؛ $ bold = " ". $ word.""؛ $ end_result. ="

  • ". str_ireplace ($ word، $ bold، $ result)."
  • "؛) echo $ end_result؛) else (echo"
  • لم يتم العثور على نتائج بحثك.
  • "; } } ?>

    يحتوي كود PHP على تعليقات يمكنك من خلالها فهم كيفية عمل البرنامج النصي بسهولة. إذا كانت هناك تطابقات في قاعدة البيانات ، فإنك تعرضها للمستخدم ، مع إبراز الكلمات التي كان يبحث عنها المستخدم بخط غامق.

    دعنا نضيف بعض CSS إلى كل هذا:

    النص الأساسي (عائلة الخطوط: Arial ، Helvetica ، sans-serif ؛) * (الهامش: 0 ؛ الحشو: 0 ؛) # الحاوية (الهامش: 0 تلقائي ؛ العرض: 600 بكسل ؛) أ (اللون: # DF3D82 ؛ زخرفة النص: لا شيء) أ: تحوم (اللون: # DF3D82 ؛ زخرفة النص: تسطير ؛) ul.update (نمط القائمة: لا شيء ؛ حجم الخط: 1.1em ؛ أعلى الهامش: 10 بكسل) ul.update li (الارتفاع: 30 بكسل ؛ border-bottom: #dedede solid 1px؛ text-align: left؛) ul.update li: first-child (border-top: #dedede solid 1px؛ height: 30px؛ text-align: left؛) # flash (margin- top: 20px؛ text-align: left؛) #searchresults (text-align: left؛ margin-top: 20px؛ display: none؛ font-family: Arial، Helvetica، sans-serif؛ font-size: 16px؛ color: # 000 ؛). word (font-weight: bold؛ color: # 000000؛) #search_box (padding: 4px؛ border: solid 1px # 666666؛ width: 300px؛ height: 30px؛ font-size: 18px؛ -moz- نصف قطر الحدود: 6 بكسل ؛ -webkit-border-radius: 6px ؛). search_button (border: # 000000 Solid 1px ؛ الحشو: 6px ؛ اللون: # 000 ؛ وزن الخط: غامق ؛ حجم الخط: 16px ؛ -moz- نصف قطر الحدود: 6 بكسل ؛ -webkit-border-radius: 6px ؛). وجدت (وزن الخط: غامق ؛ نمط الخط: مائل ؛ اللون: # ff0000 ؛ ) h2 (هامش-يمين: 70 بكسل ؛)

    لقد تعلمت الآن كيفية إنشاء نموذج بحث بسيط يعمل بدون إعادة تحميل الصفحة. أرجو أن تتمتع البرنامج التعليمي.