Сравнение слов полученных из базы и введенным пользователем
В базу из соответствующего поля заносится какое-то место проведения работ, например: склад, подвальное помещение, ресторан, кафе, чердак, поликлиника и т.д.
В документе это место выводится как «... по своевременному проведению работ в склад по адресу:...».
А нужно «... по своевременному проведению работ в складе по адресу:...», «... по своевременному проведению работ в подвальном помещении по адресу:...», «... по своевременному проведению работ в ресторане по адресу:...».
Я дилетант в 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 шт):
Попробуйте что-то вроде этого
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;
}
}
}
