首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用bitcode

使用bitcode
EN

Stack Overflow用户
提问于 2014-03-03 18:48:59
回答 2查看 515关注 0票数 3

这一点并不适用于此,因为我并不是在试图解决特定的问题,而是为了了解如何实现某件事情。但我要的是代码,所以让我们看看它是如何进行的.

假设我们一周中的每一天都有一个复选框,我们决定将这些复选框的任何组合存储为一个数字,这样:

代码语言:javascript
复制
  0 = no days
  1 = Monday 
  2 = Tuesday
  4 = Wednesday
  8 = Thursday
 16 = Friday
 32 = Saturday
 64 = Sunday
127 = everyday

如何在PHP中实现这种逻辑,这样如果我提交了"13",PHP就会知道只在星期一、星期三和星期四的复选框上打勾?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-03 18:53:01

按位ANDs:

代码语言:javascript
复制
$input = 13;

if( $input & 1 ) {
  echo 'Monday';
}
if( $input & 2 ) {
  echo 'Tuesday';
}
if( $input & 4 ) {
  echo 'Wednesday';
}
// etc

编辑

您可以使用这样的方法来避免if

代码语言:javascript
复制
$input = 13;

$days = array('mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun');

for( $i=0; $i<7; $i++ ) {
    $daybit = pow(2,$i);
    if( $input & $daybit ) {
        echo $days[$i] . ' ';
    }
}

//output: mon wed thu

有两种方法可以剥除这只猫的皮,但是“最好的”方式取决于你的结果/输出需要什么。

票数 16
EN

Stack Overflow用户

发布于 2014-11-07 13:25:46

为了避免代码结构重复(许多类似的if子句)并引入额外的“魔术”数字(27),如Sammitch's working suggestions所示,我更喜欢以下内容。

代码语言:javascript
复制
$daymap = array(
    1 => Monday,
    2 => Tuesday,
    4 => Wednesday,
    8 => Thursday,
    16 => Friday,
    32 => Saturday,
    64 => Sunday
);

$input = 13;

foreach ($daymap as $code => $name) {
    if ($input & $code) {
        echo $name.' ';
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22154793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档