将7转化为2的指数组合1,2,4
项目中有个场景,当用户在UI中选择了3个选项如A,B,C,对应的值为1,2,4后端存到数据库中要存储7(1+2+4),这个逻辑需要后端计算倒是简单,但是当需要将数据库中存储的7再次转化为界面项所需要的1,2,4,就需要麻烦些了。网上找了半天没有找到,后面自己思考了一下,用decbin这个函数实现了。
$i=7;
do{
echo $i,'->',decbin($i),'->', convert($i),PHP_EOL;
}while(--$i > 0);
function convert($num){
$binStr = strrev(decbin($num));
$arr = [];
$i=0;
do{
$bit = (int)$binStr{$i};
if($bit){
$arr[$i] = $bit *pow(2,$i);
}
}while(++$i<strlen($binStr));
return implode(',', $arr);
}
输出如下:
7->111->1,2,4 6->110->2,4 5->101->1,4 4->100->4 3->11->1,2 2->10->2 1->1->1
« 还(hai/huan)
|
克莱采奏鸣曲»