我正在使用现有的调度系统,该系统存储约会重复发生的一周中的单个数值。
映射如下:
Monday = 64
Tuesday = 32
Wednesday = 16
Thursday = 8
Friday = 4
Saturday = 2
Sunday = 1
因此,例如,如果为约会存储的值是" 108"这意味着约会在周一,周二,周四和周五(64 + 32 + 8 + 4)再次出现。
有没有一种简单的方法可以解码PHP中的数值(108)以获取日期列表?
更新:此值是按位运算符。 PHP可以轻松解码吗?
答案 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,每个位标记一天(周一到周日)。