Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

Правильное построение условий php

#php


Как правильно построить большие условия проверки?

Например код:

if ($test['status'] == 1) {
  if ($test['id'] == 2) {
    if ($test['user'] == 4) {
      if ($test['auth'] == true) {
        if ($test['map'] == 'russia') {
          if ($test['name'] == 'john') {
            $result = 1;
          } else {
            $result = 2;
          }
        } else {
          $result = 2;
        }
      } else {
        $result = 2;
      }
    } else {
      $result = 2;
    }
  } else {
    $result = 2;
  }
} else {
  $result = 0;
}


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

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


Ответы

Ответ 1



$check = [ 'status' => ['v' => 1, 'false' => 0], 'id' => ['v' => 2, 'false' => 2], 'user' => ['v' => 4, 'false' => 2], 'auth' => ['v' => true, 'false' => 2], 'map' => ['v' => 'russia', 'false' => 2], 'name' => ['v' => 'john', 'false' => 2, 'true' => 1], ]; $doCheck = function($test) use ($check){ foreach($check as $field => $opts){ if( $test[$field] !== $opts['v']) return $opts['false']; } return $opts['true']; }; можно еще вместо строковых ключей 'true/false' использовать сами занчения true/false или индексы 0\1, и в итоге массив будет вида 'name' => [2, 1, 'v' => 'jonh'] но это будет менее понятно и наглядно.

Ответ 2



https://ideone.com/S2wqPb 1, id => 2, user => 7]); Стоило бы сделать массив объектов или словарей вместо двумерного массива, но мне лень.

Ответ 3



Как вариант if ($test['status'] == 1) { if ( $test['id'] == 2 && $test['user'] == 4 && $test['auth'] && $test['map'] === 'russia' && $test['name'] === 'john' ) { $result = 1; } else { $result = 2; } } else { $result = 0; } Второй вариант function getRes($test) { if ($test['status'] != 1) { return 0; } if ( $test['id'] == 2 && $test['user'] == 4 && $test['auth'] && $test['map'] === 'russia' && $test['name'] === 'john' ) { return 1; } return 2 } $result = getRes($test);

Комментариев нет:

Отправить комментарий