function isLastNameEqual($someLastName, $otherLastName) {
// Пара "ий/ая"
if (
(mb_substr($someLastName, -2, 2) === "ий" && mb_substr($otherLastName, -2, 2) === "ая") ||
(mb_substr($someLastName, -2, 2) === "ая" && mb_substr($otherLastName, -2, 2) === "ий")
) {
return (mb_substr($someLastName, 0, -2) === mb_substr($otherLastName, 0, -2));
}
// Последня буква "а"
if (mb_substr($someLastName, -1, 1) !== "а" && mb_substr($otherLastName, -1, 1) === "а") {
return ($someLastName === mb_substr($otherLastName, 0, -1));
}
if (mb_substr($someLastName, -1, 1) === "а" && mb_substr($otherLastName, -1, 1) !== "а") {
return (mb_substr($someLastName, 0, -1) === $otherLastName);
}
return ($someLastName === $otherLastName);
}
// Проверка
var_dump(isLastNameEqual("Петров", "Петрова")); // true
var_dump(isLastNameEqual("Слуцкий", "Слуцкая")); // true
var_dump(isLastNameEqual("Сидорчук", "Сидорчук")); // true
var_dump(isLastNameEqual("Нколаев", "Грызлов")); // false
Можно ли как то их сравнить посимвольно и при совпадении Начальных 5-7 символов к примеру, пару такую не делать?
Можно использовать
полнотекстовый поиск Mysql для подобных целей. Но в данном случае это не будет хорошей идеей, так как одинаковыми могут быть сочтены просто похожие фамилии.