За последние 24 часа нас посетили 16548 программистов и 1642 робота. Сейчас ищут 1179 программистов ...

Помогите упростить код

Тема в разделе "Сделайте за меня", создана пользователем vayo, 16 сен 2019.

  1. vayo

    vayo Новичок

    С нами с:
    16 сен 2019
    Сообщения:
    6
    Симпатии:
    0
    я отслеживаю значение переменной $b, и если она является целой, добавляю десятичный ноль при выводе строки:

    PHP:
    1. $bvar = $b;
    2. switch ($b) {
    3.     case 1:
    4.         $bvar = '1.0';
    5.         break;
    6.     case 2:
    7.         $bvar = '2.0';
    8.         break;
    9.     case 3:
    10.         $bvar = '3.0';
    11.         break;
    12.     case 4:
    13.         $bvar = '4.0';
    14.         break;
    15.     case 5:
    16.         $bvar = '5.0';
    17.         break;
    18.     case 6:
    19.         $bvar = '6.0';
    20.         break;
    21.     case 7:
    22.         $bvar = '7.0';
    23.         break;
    24.     case 8:
    25.         $bvar = '8.0';
    26.         break;
    27.     case 9:
    28.         $bvar = '9.0';
    29.         break;
    30. }
    31. echo $bvar;
    то есть я отслеживаю, как умею
    на самом деле я думаю, что есть способ проверять, является ли переменная целой, без знаков после запятой : и если это так, просто добавлять при выводе строки ".0"
    не могу найти, как проверить целостность переменной
     
    #1 vayo, 16 сен 2019
    Последнее редактирование: 16 сен 2019
  2. vayo

    vayo Новичок

    С нами с:
    16 сен 2019
    Сообщения:
    6
    Симпатии:
    0
    С регулярками у меня плохо... Вот, что смогла собрать:
    PHP:
    1. $bvar = $b;
    2. if (preg_match("/^[0-9]+$/",$b)){
    3.     $bvar = ($b . '.0');
    4. }
    5. echo $bvar;
     
  3. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    ссылка, которая изменит твою жизнь
    ОСТОРОЖНО!
    --- Добавлено ---
    [​IMG]
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    @vayo если у тебя есть ограниченный набор допустимых значений, ты можешь задать этот "белый список" в массиве.

    я не про конкретно '9' => '9.0', а вообще про подход.
    PHP:
    1. $whiteList = [....];
    2. if (!in_array($parameter, $whiteList)) {
    3.     abort(403);
    4. }
    5.  
    6. // мы уверены, что параметр годный, делаем что-то полезное ...
    7. $value = $parameter . '.0';
    8. // ...
    Обрати внимение: здесь нет блока else. Он не нужен.
    В целом, лучше вызвать состояние ошибки (исключение) как можно раньше чтобы оставшийся код был простым и без лишних вложенностей if - if - if. Поэтому, например, в Laravel можно вынести проверку валидности данных в класс запроса, а метод контроллера будет работать только с годными данными.
     
  5. vayo

    vayo Новичок

    С нами с:
    16 сен 2019
    Сообщения:
    6
    Симпатии:
    0
    Я думаю, в данном конкретном случае массив не нужен, правильность переменной при вводе проверяется в другом скрипте
    Мне лишь интересно, как правильнее:

    PHP:
    1. if (!is_float($b)){
    2.    echo $b . ".0";
    3. } else echo $b;
    или всё же использовать регулярки
    PHP:
    1. $bvar = $b;
    2. if (preg_match("/^[0-9]+$/",$b)){
    3.     $bvar = ($b . '.0');
    4. }
    5. echo $bvar;
    или ещё проще способ есть?
     
  6. lastdays

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

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    PHP:
    1. $bvar = 5;
    2.  
    3. //- Только цифры
    4. if ( is_numeric ( $bvar ) )
    5. {
    6. $bvar = number_format( $bvar, 1,".","");
    7. echo $bvar;
    8. }
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    Годно, если принять что неправильные входные данные можно игнорировать.
     
  8. vayo

    vayo Новичок

    С нами с:
    16 сен 2019
    Сообщения:
    6
    Симпатии:
    0
    это вот совсем непонятно зачем вы написали
    у меня в шапке ведь ясно сказано, что отслеживается именно целое число
    Что именно годно? Что вы скажите по моему примеру?
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    Годно - это было про комментарий непосредственно над моим. Здесь подойдёт is_numeric. Точно не надо регулярку, точно не нужен блок else.

    И как я сказал, неправильный пользовательский ввод нехорошо игнорировать. Лучше сигналить ошибку и прекращать выполнение скрипта.