重构这些 if 语句系列的最佳方法是什么?
What is best way to refactor these series of if statements?
所以我有一堆带有单选按钮的问题,每个问题都有三个选项可供选择。我有一堆 If 语句(其中很多)根据每个问题的答案确定最终答案。
例如:
Question 1 :
a)
b)
c)
Question 2 :
d)
e)
f)
Question 3 :
g)
h)
i)
等等。
if语句如下:
if ( 问题 1 == a || 问题 2 == f && 问题 3 == i )
如果我想以 if 语句的形式获取所有条件,这会花费太多 space 并且可能不是最佳做法。
重构所有这些 if 语句的最佳方法是什么?
如果每一个选择组合都会导致一个独特的结果,那么您实际上是在查看一个 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];
这是否真的是实现它的最佳可能方式值得怀疑,在不了解您的逻辑的情况下我们不知道。
我最终用 switch 语句和函数重构了它。我敢肯定,我可以通过更优雅的方式来做到这一点。如果我找到方法,将更新答案。
所以我有一堆带有单选按钮的问题,每个问题都有三个选项可供选择。我有一堆 If 语句(其中很多)根据每个问题的答案确定最终答案。
例如:
Question 1 :
a)
b)
c)
Question 2 :
d)
e)
f)
Question 3 :
g)
h)
i)
等等。
if语句如下: if ( 问题 1 == a || 问题 2 == f && 问题 3 == i )
如果我想以 if 语句的形式获取所有条件,这会花费太多 space 并且可能不是最佳做法。
重构所有这些 if 语句的最佳方法是什么?
如果每一个选择组合都会导致一个独特的结果,那么您实际上是在查看一个 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];
这是否真的是实现它的最佳可能方式值得怀疑,在不了解您的逻辑的情况下我们不知道。
我最终用 switch 语句和函数重构了它。我敢肯定,我可以通过更优雅的方式来做到这一点。如果我找到方法,将更新答案。