将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)
|
克莱采奏鸣曲»