регулярное выражение — соответствие строк PHP

Я застрял в написании PHP-функции, которая будет соответствовать 2 символов. Вот пример. Это мой массив 1

$arr1 = array(
"ABC" => 'c4',
"A" => 'c1',
"AC" => 'c2',
"ACC" => 'c3',
"aBC" => 'c5',
);

И это Массив 2

$arr2 = array('ACXMASD','aCXMASD','ACCXMASD','ABCDXMASD','ABXAAAAS');

Теперь то, что мне нужно найти, — это закрытое совпадение в Keys of Array 1 и Values ​​of Array 2

Учитывая ACXMASD:

Теперь, сравнивая его с моим массивом 1. Я должен AC как ближайший матч, а не A или ACC

Аналогично, учитывая ABXAAAAS. Я должен получить «А» как лучший матч, а не ABC.

Другими словами, я хочу, чтобы ключи точно совпадали со строкой.

Я пробовал этот код, который я нашел из 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 возвращает c4. Но я ожидаю, что он вернет c1, потому что этот ключ полностью совпадает. ключ со значением c4 — это ABC, но в моей строке есть ABX.

Спасибо

1

Решение

Это может быть то, что вы искали:

<?php
$arr1 = array('ACXMASD','aCXMASD','ACCXMASD','ABCDXMASD','ABXAAAAS');

$arr2 = array(
"ABC" => 'c4',
"A" => 'c1',
"AC" => 'c2',
"ACC" => 'c3',
"aBC" => 'c5',
);

krsort($arr2);

foreach($arr1 as $val1)
{
echo "<br /> Searching for $val1";
foreach($arr2 as $var => $val2)
{
if(strpos($val1, $var) !== false)
{
echo "<br />Best Case for " . $val1 . " is " . $val2 . " " . $var . " <br />";
break;
}
}

}
?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]