0

如果有人能想到一个更好的问题名称,请进行编辑:)

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

如果它们被设置,它们将被发送到服务器并做出响应。我需要将响应 ID 与字段匹配。

字段:A B 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]; }

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

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

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

4

2 回答 2

3

以某种方式将您的$a, $betc. 东西放在一个数组中;我想它们最初是作为数组提交的。所以让我们假设你有一个像这样的数组:

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

然后简单地说:

$result = array_combine($letters, array_slice($response, 0, count($letters)));
于 2013-07-27T18:40:58.880 回答
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

于 2013-07-27T18:59:34.583 回答