我不知道在PHP中是否可行,但我想根据用户输入的内容以及输入错误的情况检查数组是否正确。例如,我可以有这样的数组:
$correct_values = array('accounts','users','cheesecake','banana');
如果用户提交了一个字符串,例如acounts
(请注意只有一个' c'),那么我想通过$correct_values
- 数组,看看是否有类似的东西并返回值 - 在这种情况下return $correct_values[0]
。如果用户提交banan
,则应返回$correct_values[3]
。
PHP中是否存在允许我检测到此功能的现有功能?或者我是否需要创建一个包含所有常见错误的$common_typos
数组并返回$correct_values
的数组键?
答案 0 :(得分:5)
这基本上是levenshtein($input, $entry)
方法的用途。在您的使用案例中,您将遍历$correct_values
中的每个条目,计算两个字符串之间的Levenshtein距离,并选择距离最小的那个(如果超过某个值,则不返回任何结果,例如2)。
示例:
/**
* Returns the closest Levenshtein match
* @param string $input
* @param array $correct_values
* @param int $threshold
* @return null|string Either the closest-matching string or null
*/
public function getCloseMatch($input, $correct_values = array(), $threshold = 2) {
$closest_match = array('value' => null, 'distance' => null);
foreach($correct_values as $value) {
$distance = levenshtein($input, $value);
if($distance === 0) {
// Great, we got an exact match!
return $value;
}
if($closest_match['distance'] === null || ($distance >= 0 && $distance < $closest_match['distance'])) {
$closest_match['value'] = $value;
$closest_match['distance'] = $distance;
}
}
if($closest_match['distance'] === null || $closest_match['value'] === null || $closest_match['distance'] > $threshold) {
return null;
}
return $closest_match['value'];
}
答案 1 :(得分:0)
查看Hamming distance - 它会为您提供一个数字,说明您需要在搜索字词中更改多少字母以匹配正确的值。然后,您可以选择具有最小汉明距离的正确值。