Посмотрите на функцию Левенштейна
По сути, это дает вам разницу (в смысле стоимости) между строками.Т.е. какова стоимость преобразования строки A в строку B.
Установите себе пороговое расстояние левенштейна и что-нибудь под этим для двух слов означает, что они похожи.
Также BitapАлгоритм работает быстрее, поскольку он может быть реализован с помощью побитовых операторов, но я полагаю, что вам придется реализовать его самостоятельно, если где-то нет PHP-библиотеки для него.
РЕДАКТИРОВАТЬ Виспользуйте метод Левенштейна:
Строка поиска - "maptop", и вы устанавливаете свой "порог стоимости", чтобы сказать 2. Это означает, что вы хотите, чтобы любые слова, которые являются двумя операциями преобразования строки, были удалены от вашей строки поиска.
так что вы перебираете массив строк «A» до тех пор, пока
levenshtein ( A[i] , searchString ) <= 2
Это будет ваше совпадение. Однако вы можете получить более одного подходящего слова, так что вам решать, как вы будете обрабатывать дополнительные результаты.