2

動的配列を作成し、配列内のデータを処理したい。例:

a) 数字の入力値が2の場合、それぞれ 2 つの要素を持つ 2^2 = 4 つの配列を作成する必要があります。これらの要素はバイナリ形式 (2 要素) => 00、01、10、11

[pre]
Array1[] = {0, 0};
Array2[] = {0, 1};
Array3[] = {1, 0};
Array4[] = {1, 1};
[/pre]

b) 数字の入力値が i 3の場合、それぞれ 3 つの要素を持つ 2^3 = 8 つの配列を作成する必要があります。これらの要素は 2 進数 (3 つの要素) の形式です => 000、001、010、011、100、101、110、111

[pre]
Array1[] = {0, 0, 0};
Array2[] = {0, 0, 1};
Array3[] = {0, 1, 0};
Array4[] = {0, 1, 1};
Array5[] = {1, 0, 0};
Array6[] = {1, 0, 1};
Array7[] = {1, 1, 0};
Array8[] = {1, 1, 1};
[/pre]

次に、この配列要素を使用して、mysql テーブルに「000」から「111」がいくつ存在するかを計算します。テーブルには、id (auto_increment) と value (0/1) の 2 つの行しかありません。テーブルで「101」を検索する例:

[pre]
id | value
----------
1  |   1
2  |   1   --
3  |   0    |  => (1)
4  |   1   --
5  |   0     | => (2)
6  |   1   -- 
7  |   0
8  |   0
9  |   1
10 |   1
.. |   ..
.. |   ..
5000 |  1  --
5001 |  0    |  => (n)
5002 |  1  --
5003 |  1
...  |  ...
[/pre]

友人 (Barmar) は、次のコードを使用して、テーブル内に "101" がいくつ存在するか (これは : Array6[] = {1, 0, 1};の例です) を取得するために mysql で解決策を提供しました:

[pre]
select count(*) match_count
from TheTable t1
join TheTable t2 on t1.id+1 = t2.id
join TheTable t3 on t1.id+2 = t3.id
where t1.value = 1 and t2.value = 0 and t3.value = 1
[/pre]

私の質問:
1) 入力 = 3 の要素 {0,0,0} ... {1,1,1} を保持する 8 つの配列を作成する方法は?
2) これらの 8 つの配列の "FOR" ルーチンを作成して、mysql テーブル内のパターンを検索するにはどうすればよいですか? これを以下で試してみましたが、結果は間違っていました....

[pre]
....
for ($i=1; $i<=8; $i++) {    // this is 2^3 = 8 arrays
  for ($k=0; $k<3; $k++) {
    $element$k = Array$i[$k];  // get each array elements (3 elements in each array)
  }
  $result = select count(*) match_count
        from TheTable t1
        join TheTable t2 on t1.id+1 = t2.id
        join TheTable t3 on t1.id+2 = t3.id
        where t1.value = $element$k and t2.value = $element$k and t3.value =  $element$k;  // these values must change for every array ....

       $query = mysql_query("INSERT INTO theResult(binary,presence) VALUES("'.$element$k.'","'.$result.'") ");

} // end of for
[/pre]

これは mysql テーブル "theResult" で見られると思います:

[pre]
binary  | presence
--------------------
000     | 21
001     | 18
010     | 32
011     | 11
100     | 44
101     | 17
110     | 8
111     | 25
[/pre]

しかし、それはそのようには起こりません... :(助けてください。ありがとう

4

1 に答える 1

1

エキゾチックな最初の問題のコードは次のとおりです。

$N = 3;

for($i = 0; $i < pow(2,$N); $i++)
    ${"Array".$i} = str_split(str_pad(decbin($i), $N, '0', STR_PAD_LEFT));

$Array1$Array2、は、バイナリ値を持つ目的のサブ配列で構成され...ます。$Array8

たとえば、の値$Array5

array(3) { [0]=> string(1) "1" [1]=> string(1) "0" [2]=> string(1) "1" }

コードは自然なNs に共通です。

PS:$arr[$i]サロゲート配列の代わりに通常の PHP 配列を使用する方がはるかに優れています${"Array".$i}

于 2013-09-08T17:39:36.367 に答える