我一直在尝试将字符串与数组中的值匹配,并从具有最高字符匹配计数的字符串开始输出数组字符串。例如:
$array = array(
'mike'=>'book21',
'ben'=>'buzz',
'jack'=>'airdrone',
'july'=>'march',
'fred'=>'blend45'
);
$string = 'blenmaio2';
如您所见,' blend45' 具有最高匹配字符,共有4个匹配字符。我希望能够从前四个最高匹配数开始输出它们,这是我想要的输出示例:
- blend45
- book21
- 行军
- 嗡嗡声
醇>
答案 0 :(得分:3)
我认为levenshtein()
函数是实现目标的最合适方法:
$array = array(
'mike'=>'book21',
'ben'=>'buzz',
'jack'=>'airdrone',
'july'=>'march',
'fred'=>'blend45'
);
$string = 'blenmaio2';
uasort($array, function($a, $b) use ($string) {
$aDistance = levenshtein($string, $a);
$bDistance = levenshtein($string, $b);
return ($aDistance < $bDistance) ? -1 : 1;
});
print_r($array);
// Output:
// Array
// (
// [fred] => blend45
// [july] => march
// [mike] => book21
// [ben] => buzz
// [jack] => airdrone
// )
更新使用uasort()
代替usort()
来保留数组密钥。
我刚刚注意到我的答案比较了相似度,但不符合最高字符数匹配,所以很抱歉:)
答案 1 :(得分:3)
这是我第一次尝试帮助某人,所以希望这可以解决问题。我知道你可以稍微简化代码,但这就是我所拥有的。
<?php
$array = array(
'mike'=>'book21',
'ben'=>'buzz',
'jack'=>'airdrone',
'july'=>'march',
'fred'=>'blend45'
);
$string = 'blenmaio2';
$sort_array=array(); //Empty array
foreach ($array as $key => $value){
$num = similar_text($value,$string); //Using similar text to compar the strings.
$sort_array[$value] = $num; //Adding the compared number value and sring value to array.
}
arsort($sort_array, SORT_REGULAR);//Sorting the array by the larges number.
print_r ($sort_array);
//creating another foreach statement to get the output you wanted.
$count = 0;
foreach($sort_array as $key => $value){
$count++;
echo $count.". ".$key."\n";
};
?>
结果:
Array
(
[blend45] => 4
[book21] => 3
[airdrone] => 3
[march] => 2
[buzz] => 1
)
1. blend45
2. book21
3. airdrone
4. march
5. buzz
答案 2 :(得分:1)
这是你的回答。它有点不同,因为我使用levenshtein函数来找到两个单词之间最近的。 我正在使用uasort以您喜欢的方式重新排序数组。 当然,你可以用函数替换最近的算法。
Phonegap