Php 从最高相似性到最低相似性的回显字符串

Php 从最高相似性到最低相似性的回显字符串,php,foreach,Php,Foreach,很难解释,但我需要一些帮助。 所以我有,比如说4根弦 $query='googleawesome',, $result1='谷歌很酷',, $result1='谷歌太棒了',以及 $result3='other page' 假设我使用了PHP的similor_text()和$result1相似性为60%,$result2相似性为70%,而$result3相似性为5% 我如何按从高到低的顺序回应它们。注意,我使用了3个以上的字符串,我只是使用foreach()来回显结果 编辑:这是我的一段代码 i

很难解释,但我需要一些帮助。 所以我有,比如说4根弦
$query='googleawesome',,
$result1='谷歌很酷',,
$result1='谷歌太棒了',以及
$result3='other page'

假设我使用了PHP的
similor_text()
$result1
相似性为60%,
$result2
相似性为70%,而
$result3
相似性为5%

我如何按从高到低的顺序回应它们。注意,我使用了3个以上的字符串,我只是使用
foreach()来回显结果

编辑:这是我的一段代码

if(isset($_GET['q'])) {
    $results = file(__DIR__ . '/data/urls.txt');
    $query = $_GET['q'];
    foreach($results as $result) {
        $explode = explode('::', $result);
        $site = $explode[0];
        $title = $explode[1];
        /* if $query = similar to $title, echo ordered by similarity. */
    }
}

我建议您将所有字符串存储在一个数组中,并使用用户定义的比较函数,如

PHP的
usort
函数来创建您自己的比较函数。直截了当地说:



请注意,这可能是非常低效的,因为您对每个字符串不止一次地计算
相似的文本。

例如,您可以使用结果和文本构建一个数组,而不是对数组排序并打印

 if(isset($_GET['q'])) {
    $results = explode("\n",file_get_contents(__DIR__ . '/data/urls.txt')); // i assume all url is in a new line
    $query = $_GET['q'];
    $similarity = array();
    $map = array();        
    foreach($results as $result) {
        list($site,$title) = explode('::', $result);
        $similarity[$site] = similar_text($title,$query); //calculate similari by title for sites 0 is similar bigger is not realy similar
        $map[$site] = $title;            
    }
    asort($similarity,SORT_NUMERIC); //sort the results

    $limit = 10;
    foreach($similarity as $site=>$sim){
         print "<a href='{$site}'>{$map[$site]}</a>({$sim} % differnece what you need)<br/>";
         if( --$limit < 1) break;
    }
}
if(isset($\u GET['q'])){
$results=explode(“\n”,file_get_contents(uuu DIR_uu.'./data/url.txt”);//我假设所有url都在新行中
$query=$\u GET['q'];
$similarity=array();
$map=array();
foreach($results作为$result){
列表($site,$title)=分解(“::”,$result);
$similarity[$site]=similari_text($title,$query);//根据站点0的标题计算similari是相似的更大的不是真正的相似
$map[$site]=$title;
}
asort($similarity,SORT_NUMERIC);//对结果进行排序
$limit=10;
foreach($site=>$sim){
打印“({$sim}%不同于您需要的内容)
”; 如果(-$limit<1)中断; } }
应阅读的链接:


此解决方案将允许具有相同相似性排名的$results不会相互覆盖。他们被列为先到先得

$query = 'google awesome';
$results = array('google is cool', 'google is awesome','other page');
foreach ($results as $result) {
  $rank = similar_text($query,$result);
  $rankings[$rank][] = $result;
}
krsort($rankings);

“从最高到最低的相似性”以哪个字符串作为参考点?到变量
$query
。更新了代码,我知道它看起来不好,但我不能使用数据库,哈哈。顺便说一下,文件的内容是
http://url.com/::Title
我会进一步预计算
类似的文本
,以避免不必要地重新计算。我非常困惑。即将更新我的问题,请重新阅读。似乎不起作用<代码>https://v1k.org/search/?q=vlad1k
我的名字添加了几个结果。还是没什么。我的URL文件-它运行良好,但它最后显示了最具代表性的搜索。你如何扭转这种局面?好的,非常感谢。最后一个问题:如何将结果限制为10?没有页面,只有结果。没有数组,还有什么方法可以做到这一点吗?你有什么理由不能使用数组吗?这对我来说似乎有点难。idk为什么。那么我建议你学习如何使用数组,它们在做事情时非常方便!你可以不用数组,但它会涉及很多循环和条件以及更多的代码。我的意思是,你所要做的就是按照你想要的顺序获得排名,只需复制/粘贴这些代码。在那之后,你想做什么,只需回显结果或其他什么?+1基本上是正确答案,但是,对于适当的排序,您确实希望
-1
(或任何负数)返回,否则它会假定一些是相等的,而另一些是不相等的<代码>返回相似的\u文本($ref,$a)-相似的\u文本($ref,$b)会更好。
$query = 'google awesome';
$results = array('google is cool', 'google is awesome','other page');
foreach ($results as $result) {
  $rank = similar_text($query,$result);
  $rankings[$rank][] = $result;
}
krsort($rankings);