将7转化为2的指数组合1,2,4作者:luke

项目中有个场景,当用户在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
时间:2019-2-26 分类:练习