写了个属性码判定思路 //普通权限编码 function - Assbbs
写了个属性码判定思路 //普通权限编码 function B8 ENC $a { if !$a {return 0;} $z=''; for $i=1;$i<=8;$i++ {$z.=in array $i,$a ?1:0;} return base convert $z,2,10 ; } //普通权限解码 function B8 DEC $a { i…
写了个属性码判定思路 //普通权限编码 function B8 ENC $a { if !$a {return 0;} $z=''; for $i=1;$i<=8;$i++ {$z.=in array $i,$a ?1:0;} return base convert $z,2,10 ; } //普通权限解码 function B8 DEC $a { if !$a {return array ;} $z=array ; foreach str split sprintf '%08d',base convert $a,10,2 as $a=>$b {if $b {$z =$a+1;}} return $z; } //普通权限扩展 function B8 EXT $a { if !$a {return array ;} $a=array intersect $a,array 1,2,3,4,5,6,7,8 ; $z=array ; for $i=1;$i<256;$i++ { $b=sprintf '%08d',base convert $i,10,2 ; foreach $a as $ a {if !substr $b,$ a-1,1 {continue 2;}} $z =$i; } return $z; } //冲突权限编码 function B16 ENC $a { if !$a {return 0;} $z=''; for $i=1;$i<=6;$i++ {$z.=in array $i+10,$a ?1:0;} return base convert $z,2,10 +20; } //冲突权限解码 function B16 DEC $a { if !$a {return array ;} $z=array ; foreach str split sprintf '%06d',base convert $a-20,10,2 as $a=>$b {if $b {$z =$a+11;}} return $z; } //冲突权限扩展(用户初始化也用) function B16 EXT $a { if !$a {return array ;} $a =array diff array 11,12,13,14,15,16 ,$a ; $z=array ; for $i=1;$i<64;$i++ { $b=sprintf '%06d',base convert $i,10,2 ; foreach $a as $ a {if substr $b,$ a-11,1 {continue 2;}} $z =$i+20; } return $z; } //冲突标签触发 function B16 TAG $a { if !$a {return array ;} INIT ; $z=array ; foreach $GLOBALS ':B' as $b=>$ b { if $b<11||$b>16||!is array $ b {continue;} foreach $ b as $t {$t=explode '.',$t ;if empty $t 0 ||!in array $t 0 ,$a || !empty $t 1 &&!in array $t 1 ,$a {continue;}$z =$b;} } return $z; } 属性码是1字节存储0-255,$GLOBALS这个被淘汰了,回头改用变量。 可以记录8种属性以及这些属性组合形成的排异态。