2013-09-16 4 views
0

Я хочу найти целую новость, вставив слово в текстовое поле. Я не знаю, как это сделать. Вот мой код, поэтому вы знаете, что я имею в виду.Как искать с помощью текстового поля? php

<form action="search.php" method="get"> 
    <tr><th>search: </th><td><input type="text" name="search" value="{$word}"></td></tr> 
</form> 

Как проверить, существует ли слово, которое я вставил в панель поиска, где-то в ленте новостей?

Моя лента новостей используется так:

$xml=simplexml_load_file("newsfeed.xml"); 
    foreach($xml->channel->item as $item) { 
     echo '<h1 class="title">' . $item->title . '</h1>'; 
     echo '<p class="desc">'.$item->description."</p>"; 
} 
+0

@rid видеть мою редактировать – Loko

+0

It действительно зависит от того, какие результаты вы хотите. К сожалению, на PHP (или других языках) нет способа достичь уровня релевантности, который Google и Bing получают в одной или двух строках. Я бы посоветовал прочитать различные методы поиска, такие как подстановочные знаки, полнотекстовый поиск, индексирование, анализ корневого слова и т. Д. И т. Д. И выбрав тот, который соответствует вашим потребностям. –

+0

На самом деле простой, но смелый подход может выглядеть с помощью [stristr()] (http://php.net/manual/en/function.stristr.php), если $ _POST ['search'] находится либо в $ item-> title или $ item-> description – Tuim

ответ

1

Думаю, вы можете использовать функцию strpos.

Найдите числовое положение первого появления иглы в строке стога сена в .

Пример:

$a = 'Long text to look into it.' 

if (strpos($a, 'it') !== false) 
    echo 'true'; 

В вашем случае, вы можете использовать StrPos либо найти слово в названии элемента или описание товара:

$a = $_GET['search']; 

foreach($xml->channel->item as $item) { 
    print_result = 0; // flag to know if the search is in the feed. 

    if (strpos($item->description, $a) !== false){ 
     print_result = 1; 
    } // end if desc 

    if (strpos($item->title, $a) !== false){ 
     print_result = 1; 
    } // end if title 


    if(print_result == 1){ 
     echo '<h1 class="title">' . $item->title . '</h1>'; 
     echo '<p class="desc">'.$item->description."</p>"; 
    } //end if print results. 
} // end foreach 
+1

Если вы ищете 'Bus', это не будет означать Business? –

+0

@ Майк, ты прав! он будет показывать результаты для всех совпадений символов, содержащих «шину». Если вы хотите только «Bus», вам нужно будет сделать еще несколько проверок. – Lan

+0

Обратите внимание, что 'strpos' чувствителен к регистру. Если вы хотите очистить пользовательские входы .. вы можете использовать 'stripos', который не зависит от регистра .. или использовать' strtolower' в вводах пользователя и фидах в соответствии с вашими словами ... – Lan

0

я хотел бы сделать Еогеасп, как вы делаете это сейчас: И сделать вид очков релевантности для каждой новости. Что-то вроде, если это в названии, тогда это более актуально, и если оно в начале и так далее. Затем вы можете записать его в массив и отсортировать. Надеюсь, у вас есть что-то вроде id в вашем newsfeed.xml для этого.

Смежные вопросы