if语句,x ^ 2个可能性,与响应匹配,可选字段

时间:2013-07-27 18:36:47

标签: php if-statement matching

如果有人能想出更好的名称,请进行编辑:)

我有四个字段,所有这些字段都是可选的,在PHP环境中工作,尽管这个问题可能与任何语言有关。

如果已设置,则会将它们发送到服务器并进行响应。我需要将响应ID与字段匹配。

字段: 一个 乙 C d

响应数组:0,1,2,3

如果全部设定,那很容易。我可以按原样匹配它们,A0,B1,C2,D3。如果只设置了C和D,我得到C0,D1。如果设置了A,B和D,则为A0,B1,D2。

要编码,我必须这样做:

if($a, $b, $c, $d) { $a = $response[0]; $b = $response[1]; $c = $response[2]; $d = $response[3]; }
elseif($a, $b, $d) { $a = $response[0]; $b = $response[1]; $d = $response[2]; }
elseif($a, $d) { $a = $response[0]; $d = $response[1]; }

等每个可能性等等,如果我有8个字段,则会有64个if语句。

有没有办法匹配设置到响应数组的字段而不必编写x ^ 2 if语句?

非常感谢,如果您需要我澄清,请告诉我。

2 个答案:

答案 0 :(得分:3)

以某种方式将您的$a$b等内容放入数组中;我想他们最初是作为一个数组提交的。所以我们假设您有一个类似的数组:

$letters = array('a', 'c');

然后简单地说:

$result = array_combine($letters, array_slice($response, 0, count($letters)));

答案 1 :(得分:0)

您可以使用for循环迭代fileds和外循环来迭代(2 ^ n)。

干运行后,我编写的代码如下:

$fields = array("A","B","C","D".....m values)
$response_array_size = sizeof($fields) //size

for ($i = 0; $i < pow(2,$response_array_size); $i++) {
    for ($j = 0, $k = 0; j < $response_array-size; $j++) {
        if (isset( $fields[$j] ) {
           $set_fields[$k] = $response[$j];
           $k++;
        }
    /* do whatever with set_fileds
       set_fileds contains only the fields which were set
    */ 
    }
}

时间复杂度:n ^ 2