疯狂Erlangyueming.blog.chinaunix.net
yueming
全部博文(921)
mnesia(1)
Flex框架(0)
mxml(0)
AS3(0)
MongoDB(1)
NOSQL(4)
关系型(Mysql)(0)
redis(49)
gevent(2)
Django(7)
Twisted(94)
wxpython(0)
Magento文档翻译(0)
C/C++(4)
AMP(9)
平面&三维设计(0)
网页三剑客&&html(0)
asp&&sqlserver(0)
2020年(1)
2019年(3)
2018年(3)
2017年(6)
2016年(47)
2015年(72)
2014年(25)
2013年(72)
2012年(125)
2011年(182)
2010年(42)
2009年(14)
2008年(85)
2007年(89)
2006年(155)
无色T恤
13790913
wanglian
swsw23
无赖皮肤
zhuqing_
qq203586
hk_sean
jiannma
saberwen
nowhere
__s1ng我
kubernet
wuhanyan
weiyunyi
refreshR
格伯纳
yuankk8
分类:
2010-03-26 11:00:42
<?php/*** 模仿error_reporting()的特殊结构,来实现复选框验证。* 1 E_ERROR 2 E_WARNING 4 E_PARSE 8 E_NOTICE 这是error_repoting()常量的取值,当然还有许多,就不一一列出,但都统一遵循一个规律。* 1 2 4 8... 是一个很特殊的数字序列,在二进制下,这些数字完全没有重叠,可以有多种组合,一般用在 checkbox多选的情况下。* 例如:个人爱好:吃饭【1】 睡觉【2】 游戏【3】 音乐【4】* 如果选择前两个,1+2 = 3,前三个,1+2+4 = 7,我们在存储选中状态的时候,只需要存一个和值就OK,而不需存储每个爱好的选择状态。* 在以后使用的时候,只需要checkmask()验证,即可还原状态。* 具体看下面实列:*/if(empty($_POST['mask'])) {$arr = array('吃饭','睡觉','游戏','音乐'); //note 需要生成的选项数组checkbox($arr);} else {$sum = setmask($love); //note $sum可以存储到数据库或文件中,这里仅仅为了测试,未做保存。//验证数组,如果有更多,此处索引值一定要遵循二进制的规律。值为2的(n-1)次幂$arr = array('1' => '吃饭', '2' => '睡觉', '4' => '游戏', '8' => '音乐'); echo'你的爱好:';foreach ($arr as $k => $v) {if(checkmask($sum,$k)){echo $v.'';}}}/*** 生成复选框* author:dain_sun* @param array checkbox值的数组*/function checkbox($arr) {echo '';$i = 1;foreach($arr as $value) {echo '.$i.'">'.$value.' ';$i++;}echo '';echo '';}/*** 获取选中的状态* author:dain_sun* @param array checkbox值的数组* @return int 选中状态,二进制的和值*/function setmask($arr) {if (empty($arr)) return 0;$sum = 0;foreach($arr as $key => $val) {$sum += empty($val) ? 0 :(1 << ($val - 1));}return $sum;}/*** 还原选中状态* author:dain_sun* @param int $sum 保存状态的掩码和值* @param int $mask 掩码值(1,2,4,8......)//note 此处掩码值既为验证数组的key值* @return bloon*/function checkmask($sum, $mask) {$sum = intval($sum);$mask = intval($mask);return ($mask != 0 && (($sum & $mask) == $mask));}?>
上一篇:生成静态html的一个类
下一篇:jquery 解析 json
登录 注册