2015-07-27 4 views
-1

У меня есть куча вопросов с переключателями, каждый вопрос имеет три варианта на выбор. У меня есть множество операторов If (многие из них), которые определяют окончательный ответ, основанный на ответах на каждый вопрос.Каков наилучший способ реорганизации этих операторов if?

Например:

Question 1 : 
      a) 
      b) 
      c) 

Question 2 : 
      d) 
      e) 
      f) 

Question 3 : 
      g) 
      h) 
      i) 

и так далее.

если заявления будет выглядеть следующим образом: если (Вопрос 1 == || Вопрос 2 == а е & & Вопрос 3 == я)

Если я хочу, чтобы получить все условия, как форма, если заявления, это займет слишком много места и, вероятно, не лучшая практика.

Каков наилучший способ реорганизации всех этих операторов if?

+2

Это очень зависит от того, что логика для достижения окончательного ответа. Мы не знаем, что ... – deceze

+2

В реферате нет «лучшего» способа. Лучшее решение будет зависеть от того, как выбор взаимосвязаны между собой, каковы данные, на которые они ссылаются, и т. Д. Это может быть вложенное 'if' s, это могут быть поиски карт, это может быть агрегирование информации, .. –

+0

Я бы рекомендовал использовать [конечный автомат] (https://www.google.ca/search?q=state+machine&oq=state+machine&aqs=chrome..69i57.2047j0j1&sourceid=chrome&es_sm=93&ie=UTF-8) – ndd

ответ

0

Я закончил рефакторинг с помощью операторов и функций коммутатора. Я уверен, что есть более элегантные способы, которыми я мог бы это сделать. Будет обновлен ответ, если я найду способ.

0

Если каждая комбинация вариантов приводит к уникальному результату, вы фактически смотрите на n-мерную матрицу. Проще говоря, думать о каждой опции в качестве шага на пути в массиве:

$outcomes = array(
    'a' => array(
     'd' => array(
      'g' => 'Outcome 1', 
      'h' => 'Outcome 2', 
      'i' => 'Outcome 3' 
     ), 
     'e' => array(..), 
     .. 
    'b' => array(..), 
    .. 
); 

echo 'The outcome is: ', $outcomes[$question1][$question2][$question3]; 

ли это на самом деле наилучшим образом реализовать это сомнительно, что мы не знаем, не зная больше о вашей логике ,