如果前一个字符串与当前字符串相似,我不想回显该字符串。假设我们的字符串是,
$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()
。非常有趣的功能。感谢:)