如何从php中具有最高字符匹配计数的值开始输出数组

时间:2015-04-27 01:02:35

标签: php arrays regex

我一直在尝试将字符串与数组中的值匹配,并从具有最高字符匹配计数的字符串开始输出数组字符串。例如:

$array = array(
'mike'=>'book21',
'ben'=>'buzz',
'jack'=>'airdrone',
'july'=>'march',
'fred'=>'blend45'
 );
$string = 'blenmaio2';

如您所见,' blend45' 具有最高匹配字符,共有4个匹配字符。我希望能够从前四个最高匹配数开始输出它们,这是我想要的输出示例:

  
      
  1. blend45
  2.   
  3. book21
  4.   
  5. 行军
  6.   
  7. 嗡嗡声
  8.   

3 个答案:

答案 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
// )

http://php.net/levenshtein

更新使用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