如果有人能想出更好的名称,请进行编辑:)
我有四个字段,所有这些字段都是可选的,在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语句?
非常感谢,如果您需要我澄清,请告诉我。
答案 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