我从表单中获得下一个帖子:
$_POST['segment'][2]
$_POST['segment'][3]
$_POST['segment'][4]
$_POST['segment'][5]
这些是表单中的复选框。
不要问我为什么,但发布的数据转换为: $ IN [“段”]
我用以下方式检查:
if($IN['segment'][5])
$podo_segment = 5;
elseif($IN['segment'][4])
$podo_segment = 4;
elseif($IN['segment'][3])
$podo_segment = 3;
elseif($IN['segment'][2])
$podo_segment = 2;
else
$podo_segment = 'NULL';
podo意味着脚:)。
然后我将(最高)值插入mysql。 (值越高意味着也包含更低的值,这就是为什么只使用1个字段)
我必须更新较旧的值,但使用了掩码,我真的不明白这是如何完成的,因此不知道如何将其转换/更新为新的值2,3,4或5。
$segmask = 0;
while (list($a,$b)=@each($IN["segment"]))
$segmask += pow(2,$a);
我试过php.net但是对它没有任何意义。至少没有更多$ segmask成为2 ^ $ a的值。 (什么是$ a,$ b和$ b似乎什么也没做?) 但是mysql中的结果值例如:
5给出了32,(对我来说没问题:2 ^ 5)
没有其他选择2,3,4和/或5,给出的值如下:
9977932
16273612
18366668
24662092
16448
17846476
18370636
34619404
270024716
18370780
9982092
34623564
9977980
512
16386
1064964
2
37240844
35143692
1064972
9977868
16388
2148548620
269500428
2148548668
268976140
1107836940
11026444
2149072908
1589260
最后,我需要根据这个较旧的字段更新值为2,3,4或5的新mysql字段。
提前感谢您的帮助!
答案 0 :(得分:1)
我个人不喜欢while (list() = each())
结构。它看起来很混乱,令人困惑,99.9%的时间foreach
将同样有效地完成同样的工作,如果不是更有效的话。
更改
while (list($a,$b)=@each($IN["segment"]))
$segmask += pow(2,$a);
到
foreach ($IN["segment"] as $key => $val)
$segmask += pow(2, $key);
...看看你是否还有同样的问题。如果你这样做,那么问题就在于其他地方,而且我可能会对你想要达到的目标有更多的疑问。