Сравнение слов полученных из базы и введенным пользователем

В базу из соответствующего поля заносится какое-то место проведения работ, например: склад, подвальное помещение, ресторан, кафе, чердак, поликлиника и т.д.

В документе это место выводится как «... по своевременному проведению работ в склад по адресу:...».

А нужно «... по своевременному проведению работ в складе по адресу:...», «... по своевременному проведению работ в подвальном помещении по адресу:...», «... по своевременному проведению работ в ресторане по адресу:...».

Я дилетант в PHP, только учусь, и ничего лучшего не придумал, как задавать какую-то маску для сравнения возможных вариантов и если нет ничего похожего, то выводить то, что было вписано в поле. В базе создал отдельную таблицу dEzpra_jet_cct_tip_mest_obrabotki куда заносятся строки с возможным местом введенным пользователем и его аналог в предложном падеже.

введите сюда описание изображения

Методом проб и ошибок наваял такую вот функцию, которая получает массив слов из базы, проверяет и если есть совпадение, то выводит аналог.

function d_typeplace_morf($d_typeplace)
{

    global $wpdb;
    $typeplace_results = $wpdb->get_results('SELECT vozmozhnyi_variant_mesta, ego_slovoforma_v_predlozhnom_padezhe FROM dEzpra_jet_cct_tip_mest_obrabotki');

    if ($typeplace_results) {
        foreach ($typeplace_results as $typeplace_result) {
            $d_typeplace_raw = mb_strtolower($typeplace_result->vozmozhnyi_variant_mesta);
            $d_typeplace_morf = mb_strtolower($typeplace_result->ego_slovoforma_v_predlozhnom_padezhe);
            $d_typeplace = mb_strtolower($d_typeplace);

            if (stripos($d_typeplace, $d_typeplace_raw) !== false) {
                echo $d_typeplace_morf;
            }
        }
    }
}

, где $typeplace_results - то что ввел пользователем; $d_typeplace_raw - слова для проверки; $d_typeplace_morf - то, что выводим, если найдено совпадение.

Беда в том, что я не могу сообразить, как вывести введенное пользователем место, если совпадения со словами из базы не нашлось. Пробовал так:

            if (stripos($d_typeplace, $d_typeplace_raw) !== false) {
                echo $d_typeplace_morf;
            } else {
                echo $d_typeplace;
            }

, выводит $d_typeplace причем многократно, видимо столько же, сколько слов в базе вообще.

Пробовал так:

            if (stripos($d_typeplace, $d_typeplace_raw) !== false) {
                echo $d_typeplace_morf;
            } else {
                echo $d_typeplace;
                break;
            }

, выводит $d_typeplace, пропуская $d_typeplace_morf.

Прошу прощения, если глупо пишу, многого еще не понимаю.

Буду рад отблагодарить финансово в том числе. Не редко нуждаюсь в консультациях)


Ответы (1 шт):

Автор решения: Sergey Pervushin

Попробуйте что-то вроде этого

function d_typeplace_morf($d_typeplace)
{

    global $wpdb;
    $typeplace_results = $wpdb->get_results('SELECT vozmozhnyi_variant_mesta, ego_slovoforma_v_predlozhnom_padezhe FROM dEzpra_jet_cct_tip_mest_obrabotki');

    if ($typeplace_results) {

        $found = false;

        foreach ($typeplace_results as $typeplace_result) {
            $d_typeplace_raw = mb_strtolower($typeplace_result->vozmozhnyi_variant_mesta);
            $d_typeplace_morf = mb_strtolower($typeplace_result->ego_slovoforma_v_predlozhnom_padezhe);
            $d_typeplace = mb_strtolower($d_typeplace);


            if (stripos($d_typeplace, $d_typeplace_raw) !== false) {
                echo $d_typeplace_morf;
                $found = true;
                break;
            }
        }

        if (!$found) {
            echo $d_typeplace;
        }
    }
}
→ Ссылка