PHP: если результатов нет - разделите запрос поиска и попробуйте найти части поиска - PullRequest
0 голосов
/ 01 апреля 2010

Я хочу разбить поисковый запрос на части, если нечего найти. Например: "Нелли Фуртадо фут. Джимми Джонс" -> нет результатов -> попытаться найти с Нелли, Фуртадо, Джимми или Джонс .. у меня есть api url ... это сложная часть .. я покажу вам некоторые из фрагментов:

$query = urlencode (strip_tags ($_GET[search]));

и

 $found = '0';
    if ($source == 'all')
    {
      if (!($res = @get_url ('http://api.example.com/?key=' . $API . '&phrase=' . $query . ' . '&sort=' . $sort)))
      {
        exit ('<error>Cannot get requested information.</error>');
        ;
      }

как я могу поместить запрос else в этот фрагмент, например, если ничего не найдено, взять первое слово или второе слово, возможно ли это? или, может быть, вы можете сказать мне, где я могу прочитать материал об этой функции?

спасибо !!

Ответы [ 2 ]

0 голосов
/ 01 апреля 2010

Итак, вы использовали urlencode() на $query, поэтому после этого все слова будут разделены символом +. Затем вы можете разделить слова так:

$words = explode('+', $query);

После этого просто выполните цикл for для каждого слова и снова отправьте запросы (я не знаю, для чего предназначена ваша строка $source = 'all', поэтому я просто оставлю ее там).

for ($i = 0; $i < count($words); $i++)
{
    if ($source == 'all')
    {
        if (!($res = @get_url ('http://api.example.com/?key=' . $API . '&phrase=' . $words[$i] . ' . '&sort=' . $sort)))
        {
            exit ('<error>Cannot get requested information.</error>');
        }
    }
}
0 голосов
/ 01 апреля 2010

Звучит так, как будто вы хотите разделить условия поиска по пробелам. explode () может справиться с этим довольно легко, если вы просто хотите использовать пробелы (вы можете использовать preg_split () для более сложного разбиения).

  $url = 'http://api.example.com/?key='.$API.'&sort='.$sort.'&phrase='; 
  if (!($res = @get_url ($url.$query)))
  {
    //couldn't find it, try piece by piece
    $pieces = explode(' ',$query);
    foreach($pieces as $p) {
       if (! empty($p)) {
         $res = @get_url ($url.$p);
         if ($res) {
            //success, do something
         }
       }
    }

    if (! $res) {
       //no results
    }
  }
...