如何创建动态数组并使用php处理它

时间:2013-09-08 16:54:35

标签: php arrays

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

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]

但它不会发生...... :( 请帮忙。 谢谢

1 个答案:

答案 0 :(得分: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 s。

P.S。:使用常规PHP数组$arr[$i]代替代理数组${"Array".$i}要好得多。