| 
	
 | 
 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] 
 |