Может быть, у вас есть сом-строки, которые длиннее 255 символов?Функция levenshtein () возвращает -1 в этих случаях, что означает, что последняя такая строка всегда будет «самой короткой» в соответствии с вашим алгоритмом.Если это ваша проблема, вам нужно отбросить значения, где $ lev равен -1, следующим образом:
foreach ($allingrd as $ingrd) {
$lev = levenshtein($ingrdname, $ingrd);
if (($lev <= $shortest || $shortest < 0) && $lev != -1) {
$closeword = $ingrd;
$shortest = $lev;
}
}
return $closeword;
Обратите внимание, что $ closeword может быть не всегда установлен (если, например, все строки в$ allingrd длиннее 255 символов или если $ allingrd пусто).Не забудьте инициализировать $ closeword чем-то разумным перед циклом, например false, null или пустой строкой.