Это простая версия, которая впоследствии находит слово за словом наилучшее совпадение.
declare (strict_types=1);
$dataBaseName = 'Jardine Lloyd Thompson';
$bankdataRows =
[
'Thompson Jardine Lloyd',
'Blaaa Llayd Thoapson f***ing user input Jordine aso. ',
];
// assume the "database" is already stored trimmed since it is server-side controlled
$dbWords = preg_split("#[\s]+#", $dataBaseName);
foreach ($bankdataRows as $bankdata)
{
// here we trim the data received from client-side.
$bankWords = preg_split("#[\s]+#", trim($bankdata));
$result = [];
if(!empty($bankWords))
foreach ($dbWords as $dbWord)
{
$idx = null;
$least = PHP_INT_MAX;
foreach ($bankWords as $k => $bankWord)
if (($lv = levenshtein($bankWord, $dbWord)) < $least)
{
$least = $lv;
$idx = $k;
}
$result[] = $bankWords[$idx];
unset($bankWords[$idx]);
}
$result = array_merge($result, $bankWords);
var_dump($result);
}
результат
array(3) {
[0] =>
string(7) "Jardine"
[1] =>
string(5) "Lloyd"
[2] =>
string(8) "Thompson"
}
array(8) {
[0] =>
string(7) "Jordine"
[1] =>
string(5) "Llayd"
[2] =>
string(8) "Thoapson"
[3] =>
string(5) "Blaaa"
[4] =>
string(7) "f***ing"
[5] =>
string(4) "user"
[6] =>
string(5) "input"
[7] =>
string(4) "aso."
}
Возможно, вы захотите расширить этот подход, сначала вычислив расстояние Левенштейна каждую возможную комбинацию, а затем выберите лучший весь матч.
Замените NSString* NSInteger.
Это верно для любого постоянного типа, быть этим примитив, такой как интервал/плавание или класс, такой как NSString или NSInteger.
единственная вещь знать состоит в том, требуете ли Вы константы или указателя на константу (такую как withNSString), и как это инициализируется в.m Целочисленном примере файла
:
// constants.h
extern NSInteger const MyIntegerConstant;
// constants.m
NSInteger const MyIntegerConstant = 666;
(Примечание: по причине, почему NSInteger вместо просто регулярного "интервала", см. это сообщение )
пример Класса:
// constants.h
extern MyClass* const MyClassConstant;
// constants.m
MyClass* const MyClassConstant= [[MyClass alloc] initWith: paramOne and:paramTwo];