Я застрял в написании функции PHP, которая будет соответствовать 2 символам. Вот пример. Это мой массив 1Соответствие строк PHP
$arr1 = array(
"ABC" => 'c4',
"A" => 'c1',
"AC" => 'c2',
"ACC" => 'c3',
"aBC" => 'c5',
);
И это массив 2
$arr2 = array('ACXMASD','aCXMASD','ACCXMASD','ABCDXMASD','ABXAAAAS');
Что теперь мне нужно найти это матч закрывается в Ключах массива 1 и значениях массива 2
Учитывая ACXMASD:
Сейчас пока compairing это с моим массивом 1. Я должен AC как ближайший матч, а не или ACC
Аналогично с учетом ABXAAAAS. Я должен получить «А» как лучший матч, а не АВС.
Другими словами, я хочу, чтобы клавиши точно соответствовали строке.
Я пробовал этот код, который я нашел из stackoverflow. Но проблема с этим заключается в следующем.
Моя функция
function findClosestMatchingString($s) {
$stringEditDistanceThreshold = 7;
$arr2 = array(
"ABC" => 'c4',
"A" => 'c1',
"AC" => 'c2',
"ACC" => 'c3',
"aBC" => 'c5',
);
$closestDistanceThusFar = $stringEditDistanceThreshold + 1;
$closestMatchValue = null;
foreach ($arr2 as $key => $value) {
$editDistance = levenshtein($key, $s);
echo "$editDistance <br/>";
// exact match
if ($editDistance == 0) {
return $value;
// best match thus far, update values to compare against/return
} elseif ($editDistance < $closestDistanceThusFar) {
$closestDistanceThusFar = $editDistance;
$closestMatchValue[] = $value;
}
}
return $closestMatchValue; // possible to return null if threshold hasn't been met
}
$arr1 = array('ACXMASD','aCXMASD','ACCXMASD','ABCDXMASD','ABXAAAAS');
// do the mapping
print_r(findClosestMatchingString('ABXAAAAS'));
Теперь проблема заключается в том, что print_r возвращается с4. Но я ожидаю, что он вернет c1, потому что этот ключ полностью совпадает. ключ со значением c4 - ABC, но моя строка имеет ABX.
Благодаря
Я не думаю, что вы понимаете, что расстояние Левенштейна есть. – Barmar
Для изменения 'A' на' ABXAAAAS' требуется добавить 'BXAAAAS', это расстояние 7. Для изменения 'ABC' на' ABXAAAAS' требуется заменить 'C' на' X' и добавить 'AAAAS', это расстояние только 6. – Barmar
Я вижу. Позвольте мне попробовать сыграть с этим. Вы думаете, что я в правильном направлении. Я имею в виду, что мне действительно нужно использовать расстояние Левенштейна, или это может быть сделано с помощью некоторых других способов в PHP (если вы понимаете, что мне нужно). Еще раз спасибо –