За последние 24 часа нас посетил 20781 программист и 1129 роботов. Сейчас ищут 362 программиста ...

Как определить в тексте наличие слов в разных формах?

Тема в разделе "PHP для новичков", создана пользователем Илья_2712, 23 дек 2020.

Метки:
  1. Илья_2712

    Илья_2712 Новичок

    С нами с:
    23 дек 2020
    Сообщения:
    29
    Симпатии:
    0
    Мой вопрос из разряда "Тупой НУБ", к троллингу готов)

    Подскажите, пжлст, как в моем случае можно записать функцию, чтобы она была более гибкая и переводила не только конкретный текст?

    Например есть 4 типа значений: Мужской, Женский, Красивые дети, Какой-то другой текст. Есть такая функция:

    Код (Text):
    1. function my_map_data( $data ) {
    2.     $map = array(
    3.         'Мужской' => 'Для мужчин',
    4.         'Женский' => 'Для женщин',
    5.     );
    6.     return ( array_key_exists( $data, $map ) ) ? $map[ $data ] : $data;
    7. }
    В данном случае функция переводит только то, что указано дословно.

    А мне нужно так:

    Если "Женский", то записать "Для женщин".

    Если "Мужской", то записать "Для мужчин".

    Если содержится слово "дети", то записать "Для детей".

    Если любой другой текст, то ничего не записывать.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.816
    Симпатии:
    735
    Адрес:
    Татарстан
    ну дополнить массив однако
    PHP:
    1. $map = array(
    2.         'Мужской' => 'Для мужчин',
    3.         'Женский' => 'Для женщин',
    4.         'Детский' => 'Для детей',
    5.     );
    + у вас регистрозависмая проверка ... то есть для мужской или мУжской не сработает
     
  3. Илья_2712

    Илья_2712 Новичок

    С нами с:
    23 дек 2020
    Сообщения:
    29
    Симпатии:
    0
    Ну это то понятно, что дополнить. Вопрос немного в другом. Не обязательно "Детский", могут быть разные варианты. Поэтому нужно сделать так, как я указал - если строка содержит слово "детский" (не путать с равно "детский"), то записать как "Для детей", а если нет подходящего варианта, то ничего не записывать.
     
  4. roboformation

    roboformation Активный пользователь

    С нами с:
    30 авг 2020
    Сообщения:
    162
    Симпатии:
    40
    PHP:
    1. if (strpos ($data, "дети") !== false) {
    2.     return "Для детей";
    3. }
     
  5. Илья_2712

    Илья_2712 Новичок

    С нами с:
    23 дек 2020
    Сообщения:
    29
    Симпатии:
    0
    Правильно и я понимаю? Вот так надо написать? А то мои знания пхп приблизительно равны нулю)

    Код (Text):
    1. function my_map_data( $data ) {
    2.    if ($map = array(
    3.         'Мужской' => 'Для мужчин',
    4.         'Женский' => 'Для женщин',
    5.     ));
    6. {
    7.     return ( array_key_exists( $data, $map ) ) ? $map[ $data ] : $data;
    8. }
    9. if (strpos ($data, "дети") !== false)  {
    10. return "Для детей";
    11. }
    12. }
     
  6. roboformation

    roboformation Активный пользователь

    С нами с:
    30 авг 2020
    Сообщения:
    162
    Симпатии:
    40
    Поменять местами два блока условия, иначе не обработается вариант с детьми.
     
  7. Илья_2712

    Илья_2712 Новичок

    С нами с:
    23 дек 2020
    Сообщения:
    29
    Симпатии:
    0
    Вот написал так, но не сработало.

    Код (Text):
    1.  
    2. function my_map_data_Probnik( $data ) {
    3.     if (strpos ($data, "дети") !== false)  {
    4. return "Для детей";
    5. }
    6.    if ($map = array(
    7.         'Мужской' => 'Для мужчин',
    8.         'Женский' => 'Для женщин',
    9.         ));
    10.     {return ( array_key_exists( $data, $map ) ) ? $map[ $data ] : $data;}
    11. }
    Видимо с синтаксисом проблемы.
    Можно набраться наглости и попросить подправить?
     
    #7 Илья_2712, 23 дек 2020
    Последнее редактирование: 23 дек 2020
  8. roboformation

    roboformation Активный пользователь

    С нами с:
    30 авг 2020
    Сообщения:
    162
    Симпатии:
    40
    у меня всё работает. Ты функцию хоть вызвал?
    --- Добавлено ---
    PHP:
    1. function my_map_data_Probnik( $data ) {
    2.         if (strpos ($data, "дети") !== false)  {
    3.             return "Для детей";
    4.         }
    5.            $map = [
    6.             'Мужской' => 'Для мужчин',
    7.             'Женский' => 'Для женщин'
    8.                 ];
    9.             return key_exists( $data, $map ) ? $map[ $data ] : $data;
    10.     }
    11.     echo my_map_data_Probnik ("крадети");
    Посмотри, это выводит "Для детей"?
     
  9. amberson

    amberson Активный пользователь

    С нами с:
    23 июл 2020
    Сообщения:
    61
    Симпатии:
    13
    Тут реги на ум приходят, дабы исключить лишние проверки и расширить диапазон возможных вариантов входных данных. Ведь еще и регистр надо учитывать.
    @Илья_2712 посмотри регулярные выражения в php
    https://www.php.net/manual/ru/ref.pcre.php
     
  10. Илья_2712

    Илья_2712 Новичок

    С нами с:
    23 дек 2020
    Сообщения:
    29
    Симпатии:
    0
    Вот такую ошибку выдает:
    Import Errorкрадети{"code":"internal_server_error","message":"
    \u041d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0447\u0442\u044b \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439.<\/p>

    \u0423\u0437\u043d\u0430\u0439\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u0432 WordPress.<\/a><\/p>","data":{"status":500},"additional_errors":[]}

    Ну и плюс ко всему сайт сломался. Сервер заблокировал мне доступ к базе данных. Чет не то намудрил)