2

我想创建一个动态数组并处理数组内的数据。例子:

a) 如果有2作为数字输入值,那么它必须创建 2^2 = 4 个数组,每个数组有 2 个元素。这些元素采用二进制形式(2 个元素)=> 00, 01, 10, 11

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

b) 如果 i 3作为数字输入值,则它必须创建 2^3 = 8 个数组,每个数组包含 3 个元素。这些元素采用二进制形式(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”。该表只有 2 行:id (auto_increment) 和 value (0/1)。在表格中搜索“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)在 mysql 中给出了一个解决方案,以获取表中有多少“101”存在(例如: Array6[] = {1, 0, 1};例如),通过使用以下代码:

[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)如何使 8 个数组包含元素 {0,0,0} ... {1,1,1} 输入 = 3?
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" }

N该代码对于 natural s是通用的。

PS:$arr[$i]使用常规 PHP 数组而不是代理数组要好得多${"Array".$i}

于 2013-09-08T17:39:36.367 回答