背景
上一篇文章是关于「与运算存储一对多关系」,通过数据库的与运算可以查询出掌握了某个编程语言的猿。如何查询某猿掌握了哪几种语言呢?
方法一
1.查询出猿A存储的编程语言的值(194)
2.查询出所有编程语言2^数值和语言名对应的数组
($languages=[[1=>'Java'),[2=>'C'],[3=>'C++']....])
3.通过循环、与运算筛选出猿A掌握的编程语言
foreach($languages as $languageId => $languageName ){
if($languageId & 194 == $languageId){
//掌握的语言
//C语言(2) 、 PHP(64) 、 JavaScript(128)
}
}
方法二
以上方法会把所有编程语言都查出来,能不能通过194反推出是由哪几个编程语言「与」出来后的结果呢?
$bin = decbin(194);//11000010
function getArray($bin){
$data = [];
$len = mb_strlen($bin,'utf-8');//8
$index = $len - 1;
for($i=0;$i<=$index;$i++){
$num = $bin[$i];
if($num <> 0){
$data[] = pow(2,$index-$i);
}
}
return $data;
}
getArray($bin);//[128,64,2]