You are here: Re: [PHP] Breaking up search terms into an array intelligently « PHP « IT news, forums, messages
Re: [PHP] Breaking up search terms into an array intelligently

Posted by Brent Baisley on 09/07/05 23:42

It sounds like you are trying to build a full text search string,
perhaps for searching a MySQL database? Below is the function I came
up with a while ago. It's worked fine, although it currently does not
check for multiple spaces, but that should be easy to change. It uses
a space as a delimiter and it checks for quotes for searching on
phrases. It returns the search string for a MySQL full text boolean
mode search. You should be able to easily adapt it to your specific
needs.

function prepFullTextSearch($searchVal) {
//Split words into list
$word_List = explode(' ',stripslashes(trim
($searchVal)));
//Step through word list to get search phrases
$i = 0;
$isPhrase = false;
foreach($word_List as $word) {
$searchItems[$i] = trim(($isPhrase?$searchItems[$i].'
'.$word:$word));
//Check for start of Phrase
if(substr($searchItems[$i],0,1) == '"') {
$isPhrase = true;
}
//If not building a phrase, append wildcard (*) to end
of word
if(!$isPhrase) {
$searchItems[$i] .= '*';
$i++;
}
//Check for end of Phrase
if(substr($searchItems[$i],-1) == '"') {
$isPhrase = false;
$i++;
}
}
$searchVal = '+'.implode(' +',$searchItems);
return $searchVal;
}



On Sep 7, 2005, at 10:54 AM, Paul Groves wrote:

> I want to be able to break up a number of search terms typed into
> an input
> box into array, simple enough one would think, just use explode, e.g
>
>
> $array = explode(" ", $string);
>
>
> But what if I want to be able to cope with search terms seperated
> by > 1
> space (a common typing error)? This should work:
>
>
> function enhanced_explode($string) {
> $array = preg_split ("/\s+/", $string);
> return ($array);
> }
>
>
> But what if I want to allow "Google"-type search parameters, so that
> something like the following is split into 3 search terms?:
> firstsearchterm "second search term" thirdsearchterm
> The following code will do the trick, but is slow and doesn't allow
> for
> multiple spaces as the delimiter, nor the possibility of multiple
> delimiters
> (e.g. " ", "+", "," etc.)
>
>
> function explode2($delimeter, $string)
> {
> for ($i = 0; $i < strlen($string); $i++)
> {
> if ($string{$i} == '"')
> {
> if ($insidequotes)
> $insidequotes = false;
> else
> $insidequotes = true;
> }
> elseif ($string{$i} == $delimeter)
> {
> if ($insidequotes)
> {
> $currentelement .= $string{$i};
> }
> else
> {
> $returnarray[$elementcount++] = $currentelement;
> $currentelement = '';
> }
> }
> else
> {
> $currentelement .= $string{$i};
> }
> }
>
> $returnarray[$elementcount++] = $currentelement;
>
> return $returnarray;
> }
>
> None of these solutions are ideal, I guess a clever regular exression
> (preg_split) could solve this, but I'm not quite sure how - does
> anyone have
> any ideas? Thanks
>
> Paul
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
>

--
Brent Baisley
Systems Architect
Landover Associates, Inc.
Search & Advisory Services for Advanced Technology Environments
p: 212.759.6400/800.759.0577

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация