php查询相似度最高的字符串的方法

这篇文章主要介绍了php查询相似度最高的字符串的方法,涉及php操作字符串及数组实现相似度算法的技巧,具有一定参考借鉴价值,需要的朋友可以参考下,本文实例讲述了php查询相似度最高的字符串的方法,分享给大家供大家参考,具体如下:

根据传入的字符串和数组,返回数组中相似度最高的字符串

1. PHP代码如下:

  1. function closest_word($input, $words) {
  2. $shortest = -1;
  3. foreach ($words as $word) {
  4. $lev = levenshtein($input, $word);
  5. if ($lev == 0) {
  6. $closest = $word;
  7. $shortest = 0;
  8. break;
  9. }
  10. if ($lev <= $shortest || $shortest < 0) {
  11. $closest = $word;
  12. $shortest = $lev;
  13. }
  14. }
  15. return $closest;
  16. }

2. 代码示例如下:

  1. // 根据传入的州名(可能客户有输错),返回相似度最高的州名称
  2. $united_state_list = array(
  3. 'AL'=>"Alabama",
  4. 'AK'=>"Alaska",
  5. 'AZ'=>"Arizona",
  6. 'AR'=>"Arkansas",
  7. 'CA'=>"California",
  8. 'CO'=>"Colorado",
  9. 'CT'=>"Connecticut",
  10. 'DE'=>"Delaware",
  11. 'DC'=>"District Of Columbia",
  12. 'FL'=>"Florida",
  13. 'GA'=>"Georgia",
  14. 'HI'=>"Hawaii",
  15. 'ID'=>"Idaho",
  16. 'IL'=>"Illinois",
  17. 'IN'=>"Indiana",
  18. 'IA'=>"Iowa",
  19. 'KS'=>"Kansas",
  20. 'KY'=>"Kentucky",
  21. 'LA'=>"Louisiana",
  22. 'ME'=>"Maine",
  23. 'MD'=>"Maryland",
  24. 'MA'=>"Massachusetts",
  25. 'MI'=>"Michigan",
  26. 'MN'=>"Minnesota",
  27. 'MS'=>"Mississippi",
  28. 'MO'=>"Missouri",
  29. 'MT'=>"Montana",
  30. 'NE'=>"Nebraska",
  31. 'NV'=>"Nevada",
  32. 'NH'=>"New Hampshire",
  33. 'NJ'=>"New Jersey",
  34. 'NM'=>"New Mexico",
  35. 'NY'=>"New York",
  36. 'NC'=>"North Carolina",
  37. 'ND'=>"North Dakota",
  38. 'OH'=>"Ohio",
  39. 'OK'=>"Oklahoma",
  40. 'OR'=>"Oregon",
  41. 'PA'=>"Pennsylvania",
  42. 'RI'=>"Rhode Island",
  43. 'SC'=>"South Carolina",
  44. 'SD'=>"South Dakota",
  45. 'TN'=>"Tennessee",
  46. 'TX'=>"Texas",
  47. 'UT'=>"Utah",
  48. 'VT'=>"Vermont",
  49. 'VA'=>"Virginia",
  50. 'WA'=>"Washington",
  51. 'WV'=>"West Virginia",
  52. 'WI'=>"Wisconsin",
  53. 'WY'=>"Wyoming"
  54. );
  55. $input_state = 'Wiscsin';
  56. $state = closest_word($input_state ,array_values($united_state_list));
  57. echo $state;