解码星期几的格式

时间:2018-03-08 19:26:36

标签: php

我正在使用现有的调度系统,该系统存储约会重复发生的一周中的单个数值。

映射如下:

Monday = 64
Tuesday = 32
Wednesday = 16
Thursday = 8
Friday = 4
Saturday = 2
Sunday = 1

因此,例如,如果为约会存储的值是" 108"这意味着约会在周一,周二,周四和周五(64 + 32 + 8 + 4)再次出现。

有没有一种简单的方法可以解码PHP中的数值(108)以获取日期列表?

更新:此值是按位运算符。 PHP可以轻松解码吗?

1 个答案:

答案 0 :(得分:4)

<?php
$week = [
    'Monday' => 64, // 1000000 in binary
    'Tuesday' => 32, // 0100000 in binary
    'Wednesday' => 16, // 0010000 ...etc
    'Thursday' => 8,
    'Friday' => 4,
    'Saturday' => 2,
    'Sunday' => 1,
];

$saved_days = 108; // 1101100 in binary

$days = [];
foreach ($week as $day => $bit_value) {
    if ($saved_days & $bit_value) {
        $days[] = $day;
    }
}

var_dump($days);

结果:

array(4) {
  [0]=>
  string(6) "Monday"
  [1]=>
  string(7) "Tuesday"
  [2]=>
  string(8) "Thursday"
  [3]=>
  string(6) "Friday"
}

这种方式背后的想法是制作一个位图来标记日期,所以108 = 64 + 32 + 8 + 4是二进制1101100,每个位标记一天(周一到周日)。