0

誰かが質問のより良い名前を考えられる場合は、編集してください:)

私には 4 つのフィールドがあり、すべてオプションで、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 つある場合、if ステートメントは 64 になります。

x^2 if ステートメントを書かなくても、応答配列に設定されたフィールドを一致させる方法はありますか?

ありがとうございます。明確にする必要がある場合はお知らせください。

4

2 に答える 2

3

何とか配列にあなた$aのなどのものを入れてください。$bそれらはもともと配列として提出されたと思います。したがって、次のような配列があるとします。

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

次に簡単に:

$result = array_combine($letters, array_slice($response, 0, count($letters)));
于 2013-07-27T18:40:58.880 に答える
0

forloop を使用して繰り返し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 に答える