我有一组关键字,在这些关键字上运行foreach
循环,并将每个元素与特定搜索词匹配。例如我有像数组
Array(
[0] => polka dresses
[1] => polka clothes
[2] => polka dots dress
[3] => polka dots bottoms
)
我在数组中搜索
polka
这个词。使用strpos
或stristr
时,它会给出结果(也尝试过similar_text
,但没有结果)。问题
如果我搜索
polka
可以正常工作,但是如果不小心输入了p0lka
,则不会给出任何结果。无论如何要实现这一目标。
最佳答案
PHP代码段:
<?php
$data = array(
'polka dresses',
'polka clothes',
'polka dots dress',
'polka dots bottoms',
'dummy dummy'
);
function getSimilarMatches($sentences,$search_str){
$min_distance = -1;
$closest_matches = [];
foreach($sentences as $sentence){
$min_levenshtein_dist = -1;
foreach(explode(" ",$sentence) as $word){
$levenshtein_dist = levenshtein($word,$search_str);
if($min_levenshtein_dist == -1 || $min_levenshtein_dist > $levenshtein_dist){
$min_levenshtein_dist = $levenshtein_dist;
}
}
if($min_distance == -1 || $min_distance > $min_levenshtein_dist){
$min_distance = $min_levenshtein_dist;
$closest_matches = [];
$closest_matches[] = $sentence;
}else if($min_distance === $min_levenshtein_dist){
$closest_matches[] = $sentence;
}
}
return $closest_matches;
}
print_r(getSimilarMatches($data,'polka'));
print_r(getSimilarMatches($data,'p0lka'));
演示: https://3v4l.org/E9gea
关于php - 匹配最佳相似数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59540896/