Php 全文搜索

Php 全文搜索,php,string,full-text-search,sorting,Php,String,Full Text Search,Sorting,我有一个InnoDB表,从中检索值并将其存储在PHP中的数组中 现在,我想根据与搜索字符串中匹配项的相关性对数组进行排序 例如:如果我搜索“hai how are you”,它会将字符串拆分为单独的单词“hai”“how”“are”“you”,搜索后的结果必须如下所示: [0] hai how are all people there [1] how are things going [2] are you coming [3] how is sam 是否有任何方法可以仅在基

我有一个InnoDB表,从中检索值并将其存储在PHP中的数组中

现在,我想根据与搜索字符串中匹配项的相关性对数组进行排序

例如:如果我搜索“hai how are you”,它会将字符串拆分为单独的单词“hai”“how”“are”“you”,搜索后的结果必须如下所示:

 [0] hai how are all people there

 [1] how are things going 

 [2] are you coming

 [3] how is sam

是否有任何方法可以仅在基本PHP函数中按相关性对数组进行排序?

$searchText=“hai你好”//如果单词之间有多个空格
$searchText = "hai how      are you"; //eg: if there are multiple spaces between words
$searchText = preg_replace("(\s+)", " ", $searchText );
$searchArray =& split( " ", $searchText );

$text = array(0 => 'hai how are all people there',
              1 => 'how are things going ',
              2 => 'are you coming',
              3 => 'how is sam',
              4 => 'testing ggg');

foreach($text as $key=>$elt){
    foreach($searchArray as $searchelt){
        if(strpos($elt,$searchelt)!== FALSE){
            $matches[] =  $key;  //just storing key to avoid memory wastage
            break;
        }                
    }            
}

//print the matched string with help of stored keys
echo '<pre>matched string are as follows: ';
foreach ($matches as $key){

  echo "<br>{$text[$key]}";    
}
$searchText=preg_replace(“(\s+”,”,$searchText); $searchArray=&split(“,$searchText”); $text=array(0=>“那里的人都好吗”, 1=>“情况如何”, 2=>“你要来吗”, 3=>“山姆怎么样了”, 4=>“测试ggg”); foreach($key=>$elt形式的文本){ foreach($searchArray作为$searchelt){ if(strpos($elt,$searchelt)!==FALSE){ $matches[]=$key;//仅存储密钥以避免内存浪费 打破 } } } //使用存储的密钥打印匹配的字符串 echo'匹配字符串如下:'; foreach($匹配为$key){ 回显“
{$text[$key]}”; }
可能是这样的:


查看php手册,了解相似文本和usort的功能。

您可以查看
相似文本()
您的$query变量无法在compare()中直接访问。你需要这样做。函数compare($arrayMember1,$arrayMember2){global$query;}当我刚刚比较str1=“testing ggg”,str2=“hai how are you”similous_text()=>返回2和相似度百分比:15.384615384615我写了“可能是这样的”,这意味着我只给出了一些想法。当然,除非他/她付钱给我,否则不要期望我完全完成这项工作。关于类似的文本函数,我确信比较“how”和“hai how…”会得到比测试更大的值。不要为更好的解决方案而竞争:)事实上,我会推荐你的方法,因为我的方法效率要低得多。但他/她想要一个具有现有php功能的解决方案
$arrayToSort=array(); //define your array here
$query="hai how are you";

function compare($arrayMember1,$arrayMember2){
     $a=similar_text($arrayMember1,$query);
     $b=similar_text($arrayMember2,$query);
     if($a>$b)return 1;
     else return -1;
}

usort($arrayToSort,"compare");