php - 如何在 PHP 中以星期几的二进制表示形式检查当前日期是 TRUE 还是 FALSE

标签 php dayofweek

我有一个以“二进制”格式表示一周中的几天的字符串。示例:1001110。

在此示例中: 星期一是真的, 星期二,错误, 周三假, 星期四 真实, 星期五 真实, 星期六真实, 周日假

如何用最简单、最优雅的方式确定当前日期是真是假。

我已经能够将二进制字符串转换为星期几,然后我可以将其与当天进行比较,但我正在寻找一种更简单的方法,(如果可能的话..)

<?php
$arr_jours = array();
$arr_jours = array(
    'Monday',
    'Tuesday',
    'Wednesday',
    'Thursday',
    'Friday',
    'Saturday',
    'Sunday'
);
$week = "1001110";
$search_arr = str_split($week);
$out = array();

foreach($search_arr as $key => $value) {
    if ($value == 1) {
        $out[] = $arr_jours[$key];
    }
}

if (in_array(date('l') , $out)) {
    echo "Current day is TRUE";
}
else {
    echo "Current day is FALSE";
}

?>

这可行,但我试图让它更优雅。我怎样才能最好地优化这段代码?

感谢您的帮助。

最佳答案

如果您愿意牺牲易读性,您可以使用 binary integer literalsbitwise operators :

/**
 * @param int $date Unix time
 * @return bool
 */
function isActive($date)
{
    $days = [1 =>
        0b1000000,
        0b0100000,
        0b0010000,
        0b0001000,
        0b0000100,
        0b0000010,
        0b0000001,
    ];
    $week = 0b1001110;
    $day = $days[date('N', $date)];
    return ($week & $day) === $day;
}

Demo .

或者,您可以删除二进制文字以看起来不那么极客,而只使用按位运算符:

/**
 * @param int $date Unix time
 * @return bool
 */
function isActive($date)
{
    $days = [1 => 64, 32, 16, 8, 4, 2, 1];
    $week = bindec('1001110');
    $day = $days[date('N', $date)];
    return ($week & $day) === $day;
}

关于php - 如何在 PHP 中以星期几的二进制表示形式检查当前日期是 TRUE 还是 FALSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54266847/

相关文章:

php - MySQL 到 php 字符集问题

c# - 计算一周中即将到来的一天的日期时间

Java 日历 DAY_OF_WEEK 设置为零

php - 如何在php中的字符串中的每个字符后添加一个空格?

php - laravel 在某些情况下自动将数据插入数据库

PHP按位存储星期几

java - 在 Java 中获取周跨度作为一对从零开始的年份(0-364 或 0-365)数字

java - 日历返回错误的一年中的第几周

php - 根据条件列出 html 表中的一行

php - 找到 attr ('href' ) 并打开页面上隐藏的 iframe 内部,然后 show() iframe (jQuery + PHP)