共享一个函数 将任意数字分解成2的次方组成的和
时间:2009-06-15
来源:互联网
用途:主要用途在数据存储上,比如discuz的一个帖子 精华时 标记为1 置顶时 标记为2 那么既是精华又置顶就是3了。
这样大家就能联系到了吧,用这种方式来描述一个对象的属性值,会很明晰。
举例99999这个数字 可以用下面这个数字的值的和组成。这个表达式中不可以出现重复的数字。
array (
0 => 65536,
1 => 32768,
2 => 1024,
3 => 512,
4 => 128,
5 => 16,
6 => 8,
7 => 4,
8 => 2,
9 => 1,
)
上代码
[php]
function isAttrValue($val,$arr = array()){
if($val == 1){
$arr[] = 1;
return $arr;
}
else{
for($i=0;;$i++){
if($val<=pow(2,$i+1)&&$val>=pow(2,$i)){
break;
}
}
if($val == pow(2,$i+1)){
$arr[] = $val;
return $arr;
}
else{
$arr[] = pow(2,$i);
return isAttrValue($val - pow(2,$i),$arr);
}
}
}
[/php]
作者: ws00377531 发布时间: 2009-06-15
只是还 是不是很理解,这样分解和你举的这个例子的联系:[code]用途:主要用途在数据存储上,比如discuz的一个帖子 精华时 标记为1 置顶时 标记为2 那么既是精华又置顶就是3了。[/code]能再举个用途的例子吗
作者: Alog_W 发布时间: 2009-06-16
以cms系统举例。 一篇文章可以设置很多属性
比如 置顶,精华,热点,最新,A区显示,B区显示,C区显示,标红,标绿,加粗,斜体,h1,h2,h3,h4。
有的时候我们的做法是,在数据库里面加一个字段。 比如 is_hot(0,1) 是否热点 。但是这么多属性,在数据库里面是否要添加这么多字段呢,如果我想再添加属性呢?
事情是不是变的很麻烦了。
采用这种函数对属性去编码,可以快速解决。
举例。[code]
array(
"置顶" => 1,
"精华" => 2,
"热点" => 4,
"最新" => 8,
"A区显示" => 16,
"B区显示" => 32,
"C区显示" => 64,
)
[/code]当一篇文章被标记属性为113的时候。使用函数解析为[code]
array (
0 => 64,
1 => 32,
2 => 16,
3 => 1,
)
[/code]那么我们是不是可以清楚的知道 这篇文章的属性是“C区显示,B区显示,A区显示,置顶”
作者: ws00377531 发布时间: 2009-06-16
检查一个属性值是否有异常,也很简单 看看是否超过 最大数*2
删除一个属性,会比较麻烦。我的想法是,再做一个校验数组,这个数组里面的值,不可再被使用。
作者: ws00377531 发布时间: 2009-06-16
代码可以优化一下,呵呵。[code]
function isAttrValue($value){
$i = 0;
while ($value > 0) {
$bit = $value & 1;
$bit && ($bits[] = pow(2,$i));
$value = intval($value / 2);
$i++;
}
return $bits;
}
[/code]
作者: 飓飞 发布时间: 2009-06-16

作者: niceup 发布时间: 2009-06-16
http://bbs.phpchina.com/viewthre ... p;extra=#pid1073701
我重写过了,谢谢大家!
作者: ws00377531 发布时间: 2009-06-17

作者: nianjin 发布时间: 2009-06-28

作者: 网鬼 发布时间: 2009-06-29
这些都是列表及搜索的关键字段.. 全部放在一个字段中, 显然是对性能作挑战..
楼主的函数适合写在权限中.
作者: 冯.于安 发布时间: 2009-06-29
作者: 九龙 发布时间: 2009-08-07
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28