如果之前的字符串与当前字符串相似,则不要回显字符串



如果前一个字符串与当前字符串相似,我不想回显该字符串。假设我们的字符串是,

$strings = array("software","software","game","antivirus");

我的差异函数,

function ($val1,$val2) {
similar_text($val1,$val2,$percent);
if ($percent>83) {
// should not echo. But don't know how to do.
}
}

但我不知道该怎么做。我想应该是每个都用。

试试这样的东西:

$strings = array("software","software","game","antivirus");
$lastString = '';
foreach ($strings as $string) {
    similar_text($lastString, $string, $percent);
    if ($percent < 83) {
        echo "$string<br />";
        $lastString = $string;
    }
}

如果你不理解其中的某些部分,请留下评论,我会澄清的。

编辑:
我在条件中移动了$lastString = $string;

请考虑以下字符串列表:
$strings = array("software","sofware","sofwart","ofwart","fwart","wart","warts");

$lastString赋值留在循环之外只会打印software,即使许多单词与software非常不同——它们与前一个单词没有太大区别。

将其移动到内部实际上会产生输出:

软件
sofwart

$strings = array("software","software","game","antivirus");
$previous = '';
foreach ($strings as $string) {
  if ($string===$previous) {
    continue;
  } else {
    echo $string;
    $previous = $string;
  }
}

但我认为这样做更好(应该更快):

$strings = array("software","software","game","antivirus");
$num = count($strings);
for ($i=0;$i<$num;$i++) {
  if ($strings[$i]===$strings[$i-1] && $i!==0) {
    continue;
  } else {
    echo $strings[$i];
  }
}

顺便说一句,我完全不明白百分之几是什么意思。。

使用array_filter()的方法(假设>=5.3):

$strings = array('software', 'software', 'game', 'antivirus');
$filtered = array_filter($strings, function($curr) {
    static $prev; 
    similar_text($prev, $curr, $percent);
    $prev = $curr;   
    if ($percent < 83) {
        return $curr;
    }        
});
print_r($filtered);

收益率:

Array
(
    [0] => software
    [2] => game
    [3] => antivirus
)

希望这能有所帮助。事实上,直到现在我才知道similar_text()。非常有趣的功能。感谢:)

相关内容

最新更新