@radio_mus

Как правильно сравнить ячейки?

Здравствуйте.
Есть таблица, в которой хранятся фамилии. Нужно эти фамилии разбить по парам, но чтобы не было пар с совпадениями по фамилии с учетом пола. То есть чтобы не было таких пар как: Петров - Петрова, Иванов - Иванова.

Можно ли как то их сравнить посимвольно и при совпадении Начальных 5-7 символов к примеру, пару такую не делать?

upd
пробовал функцию типа strncmp, но они сравнивают только латинские символы, с кирилицей не получается ничего :( всегда значение 0.
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
Immortal_pony
@Immortal_pony Куратор тега PHP
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 для подобных целей. Но в данном случае это не будет хорошей идеей, так как одинаковыми могут быть сочтены просто похожие фамилии.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы