我想创建一个动态数组并处理数组中的数据。 示例:
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]
但它不会发生...... :( 请帮忙。 谢谢
答案 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}
要好得多。