最近要寫一個稽核的功能:5個層級稽核,打算用一個status狀態位記錄每一層級稽核是否透過。很少用到位操作,因此記錄下。
<?php
function setStatus($status, $stage, $is_approved)
{
$arr_a = array_map(function ($val) {
return 1 << $val;
}, range(0, 4));
$arr_r = array_map(function ($val) {
return $val - 1;
}, $arr_a);
if ($is_approved == 1) {
$status_up = $status | $arr_a[$stage - 1];
} else {
$status_up = $status & $arr_r[$stage - 1];
}
return $status_up;
}
$status = 0;
echo '<pre>';
for ($i = 1; $i <= 5; $i++) {
$status = setStatus($status, $i, 1);
var_dump("stage {$i} approved,status: {$status}");
}
var_dump('-------------');
$status = 0;
$stage = 1;
$status = setStatus($status, $stage, 1);
var_dump("stage {$stage} approved,status: {$status}");
$stage++;
$status = setStatus($status, $stage, 1);
var_dump("stage {$stage} approved,status: {$status}");
$stage++;
$status = setStatus($status, $stage, 0);
var_dump("stage {$stage} rejected,status: {$status}");