我試圖將用戶輸入的字符串轉換爲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;
}