2012-04-25 91 views
0

我试图将用户输入的字符串转换为MySQL布尔搜索。我有以下功能可以完美适用于多种场景,但它不适用于双引号。PHP布尔搜索

的String1:技术不是经理 String2的:

因此,例如,它具有以下字符串工作原理的技术或管理人员或管理

这是不对的,现在的工作只有一个,就是当你进入一个用双引号括住的短语。例如:

STRING3(不工作): “技术作家” 而不是 “文件管理器”

下面是我使用的功能:

function booltostring($input) 
{ 
    $input = strtolower($input); 
    $out = ""; 
    $plusflag = false; 
    $minusflag = false; 

    $forms = preg_split("%(and|or|not)%",$input,-1,PREG_SPLIT_DELIM_CAPTURE); 
    $forms = array_map('trim',$forms); 

    for($i = 0; $i < count($forms); $i++) 
    { 
     switch($forms[$i]) 
     { 
      case 'and': 
       $plusflag = true; 
       $minusflag = false; 
       if(count(explode(' ',$forms[$i+1])) > 1) 
       { 
        $out .= '"+'.$forms[$i+1].'" '; 
       } 
       else 
       { 
        $out .= "+".$forms[$i+1]." "; 
       } 
       $i++; 
      break; 
      case 'or': 
       if(strpos($forms[$i-1],'OR')>-1 || strpos($forms[$i-1],'or')>-1) 
       { 
        $plusflag = true; 
       } 
       if(count(explode(' ',$forms[$i+1])) > 1) 
       { 
        $out .= '"'.(($minusflag) ? "-" : "").$forms[$i+1].'" '; 
       } 
       else 
       { 
        $out .= (($minusflag) ? "-" : "").$forms[$i+1]." "; 
       } 
       $i++; 
      break; 
      case 'not': 
       $plusflag = false; 
       $minusflag = true; 
       if(count(explode(' ',$forms[$i+1])) > 1) 
       { 
        $out .= '"-'.$forms[$i+1].'" '; 
       } 
       else 
       { 
        $out .= "-".$forms[$i+1]." "; 
       } 
       $i++; 
      break; 
      default: 
       if(strpos($forms[$i+1],'OR')>-1 || strpos($forms[$i+1],'or')>-1) 
       { 
        $plusflag = false; 
       } 
       if(strpos($forms[$i+1],'AND')>-1 || strpos($forms[$i+1],'and')>-1) 
       { 
        $plusflag = true; 
       } 
       if(count(explode(' ',$forms[$i])) > 1) 
       { 
        $out .= (($plusflag) ? "+" : "")."\"".$forms[$i]."\" "; 
       } 
       else 
       { 
        $out .= (($plusflag) ? "+" : "").$forms[$i]." "; 
       } 
      break; 
     } 
    } 
    $out = trim($out); 

    return $out; 
} 

回答

0
"technical writer" not "document manager" 

此字符串不工作因为您没有删除字符串中的双引号

通过使用trim功能

编辑

使用TRIM论个人价值观,即“技术作家”,“文件管理器”

喜欢这个trim('"document manager"','"');

0

你只需要删除您手动,然后加入双引号它应该没有问题。

例如,这一个

$out .= '"+'.$forms[$i+1].'" '; 

由于这些双引号已经在输入字符串