За последние 24 часа нас посетили 20433 программиста и 1095 роботов. Сейчас ищут 384 программиста ...

Синтаксис PHP

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

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

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

    С нами с:
    23 дек 2020
    Сообщения:
    29
    Симпатии:
    0
    Вопрос очень нубский, но никак не могу его решить.

    Подскажите, есть формула следующего вида:
    PHP:
    1. function my_map_data( $data ) {
    2.     $map = array(
    3.         'Мальчики' => 'Для мальчиков',
    4.         'Мальчишки' => 'Для мальчиков',
    5.         'Молодые парнишки' => 'Для мальчиков'
    6.     );
    7.     return ( array_key_exists( $data, $map ) ) ? $map[ $data ] : $data;
    8. }
    Как упростить эту запись? То есть если значение равно любому из предложенных вариантов, то перевести на указанное значение.

    Пробовал 2 варианта:
    1)
    Код (Text):
    1. 'Мальчики', 'Мальчишки', 'Молодые парнишки' => 'Для мальчиков',
    2)
    Код (Text):
    1. 'Мальчики, Мальчишки, Молодые парнишки' => 'Для мальчиков',
    Но это не работает.
     
  2. roboformation

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

    С нами с:
    30 авг 2020
    Сообщения:
    162
    Симпатии:
    40
    PHP:
    1. function my_map_data( $data ) {
    2.     $map = ["Мальчики", "Мальчишки", "Молодые парнишки"];
    3.     return in_array ($data, $map) ? "Для мальчиков" : $data;
    4. }
     
    Илья_2712 нравится это.
  3. Илья_2712

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

    С нами с:
    23 дек 2020
    Сообщения:
    29
    Симпатии:
    0
    Это сработало! Спасибо, ты очень помог!
    А если немного усложнить задачу и нужно дописать про девочек, то как в итоге получится?

    P.S. Я попробовал так, но ничего не вышло:
    PHP:
    1. function my_map_data( $data ) {
    2. $map = ["Мальчики", "Мальчишки", "Молодые парнишки"];
    3. return in_array ($data, $map) ? "Для мальчиков" : $data;
    4. $map = ["Девочки", "Девчонки", "Красивые девчули"];
    5. return in_array ($data, $map) ? "Для девочек" : $data;
    6. }
     
  4. roboformation

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

    С нами с:
    30 авг 2020
    Сообщения:
    162
    Симпатии:
    40
    На 3 строке убрать ": $data" + тогда перестроить условие. Также ты изменяешь массив $map
     
    Илья_2712 нравится это.
  5. Илья_2712

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

    С нами с:
    23 дек 2020
    Сообщения:
    29
    Симпатии:
    0
    А можно понаглеть и попросить показать наглядно?
    Совсем не разбираюсь в коде, точнее только начинаю изучать.
     
  6. roboformation

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

    С нами с:
    30 авг 2020
    Сообщения:
    162
    Симпатии:
    40
    PHP:
    1. function my_map_data( $data ) {
    2. $map = ["Мальчики", "Мальчишки", "Молодые парнишки", "Девочки", "Девчонки", "Красивые девчули" ];
    3. return array_search ($data, $map) === false
    4. ? $data : (array_search ($data, $map) <= 2
    5. ? "Для мальчиков" : "Для девочек") ;
    6. }
    Можно так
     
    Илья_2712 нравится это.
  7. Илья_2712

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

    С нами с:
    23 дек 2020
    Сообщения:
    29
    Симпатии:
    0
    А вот в этой формуле я уже вообще ничего не понимаю)))
    Скопировать вставить кончено я смогу, но ели понадобится добавить еще какие-то значения, то темный лес. Сам не смогу ничего написать.
    Ладно, спасибо тебе огромное за помощь! Итак много помог!
     
  8. roboformation

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

    С нами с:
    30 авг 2020
    Сообщения:
    162
    Симпатии:
    40
    Я могу объяснить:
    1. Если не находим $data в массиве, возвращаем $data
    2. Если находим, то тут ещё развилка:
    1. Если ключ, связанный с найденным значением, меньше или равен 2, то, соответственно, возвращаем 'для мальчиков'
    2. Т. к. значение найдено в массиве, а 'для мальчиков' не подходит, то подходит 'для девочек'

    Посмотри, какие ключи связаны со значениями в массиве с помощью:
    PHP:
    1. $map = ["Мальчики", "Мальчишки", "Молодые парнишки", "Девочки", "Девчонки", "Красивые девчули" ];
    2. print_r ($map);
     
  9. Илья_2712

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

    С нами с:
    23 дек 2020
    Сообщения:
    29
    Симпатии:
    0
    Пробую написать код под твоим чутким руководством))

    Есть значения, которые надо интерпретировать:
    Мальчик, Мальчики, Мальчуганы - Для мальчиков
    Девочка, Девчуля - Для девочек
    Тетенька - Для женщин


    PHP:
    1. function my_map_data( $data ) {
    2. $map = ["Мальчик", "Мальчики", "Мальчуганы", "Девочка", "Девчуля", "Тетенька" ];
    3. return array_search ($data, $map) === false
    4. ? $data : (array_search ($data, $map) <= 2
    5. ? "Для мальчиков" ) ;
    6. ? $data : (array_search ($data, $map) 3 <=> 4
    7. ? "Для девочек" ) ;
    8. ? $data : (array_search ($data, $map) >= 5
    9. ? "Для женщин" ) ;
    10. }
    Примерно так?)))
    И неужели это самый простой способ перечисления?)
     
  10. roboformation

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

    С нами с:
    30 авг 2020
    Сообщения:
    162
    Симпатии:
    40
    PHP:
    1. function my_map_data ($data) {
    2.           $map = [
    3.                 "Для мальчиков" => ["Мальчик", "Мальчики", "Мальчуганы"],
    4.                  "Для девочек" => ["Девочка", "Девчуля"],
    5.                  "Для женщин" => ["Тетенька"]
    6.                ];
    7.            foreach ($map as $result => $group) {
    8.                foreach ($group as $str) {
    9.                    if ($data == $str) {
    10.                        return $result;
    11.                    }
    12.                }
    13.            }
    14.            return $data;
    15.       }
    Если количество групп большое, лучше сделать так
     
    #10 roboformation, 19 янв 2021
    Последнее редактирование: 19 янв 2021
    Илья_2712 нравится это.
  11. Илья_2712

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

    С нами с:
    23 дек 2020
    Сообщения:
    29
    Симпатии:
    0
    Вот это то, что надо.
    Спасибо огромное! Огромнейшее!