При использовании случайного токена для поиска значения в вашем массиве возникает проблема с ложными срабатываниями . Это может дать неверные результаты в зависимости от варианта использования.
В случаях поиска, например, неправильно набранных слов, я бы реализовал решение с фильтром, которое выдает соответствующий массив. Можно отсортировать результаты, рассчитав расстояние levenshtein , чтобы при необходимости получить наиболее вероятный результат.
Решение для длины строки
Очень легко реализовать.
Ложные срабатывания : Почти каждая строка такой же длины, как apple
и grape
, будет соответствовать.
Пример :
$matching = array_filter($fruits, function ($fruit) use ($content) {
return strlen($content) == strlen($fruit);
});
if (count($matching)) {
// do your stuff...
}
Регулярное выражение решение
Он сравнивает длину строки и ограниченным образом содержит символы. Он умеренный для реализации и имеет хорошую производительность при работе с большими данными.
Ложные срабатывания : контент типа abc
будет соответствовать bac
, но также bbb
.
Пример
$matching = preg_grep(
'#['.preg_quote($content).']{'.strlen($content).'}#',
$fruits
);
if (count($matching)) {
// do your stuff...
}
Буквенно-цифровой сортировочный раствор
Самый точный, но медленный подход к производительности с использованием PHP.
Ложные срабатывания : содержимое, подобное abc
, будет соответствовать bac
или cab
.
Пример
$normalizer = function ($value) {
$tokens = str_split($value);
sort($tokens);
return implode($tokens);
};
$matching = array_filter($fruits, function ($fruit) use ($content, $normalizer) {
return ($normalizer($fruit) == $normalizer($content));
});
if (count($matching)) {
// do your stuff...
}