多级审核状态的变更

最近要写一个审核的功能: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}");

检查某个阶段状态位

<?php

function getStatusBit($status, $stage)
{
    $bStr = decbin($status);
    $bPos = strlen($bStr) - $stage;
    return isset($bStr[$bPos]) ? intval($bStr[$bPos]) : 0;
}

$status = 26; // 二进制 11010
var_dump(getStatusBit($status, 1)); // 0
var_dump(getStatusBit($status, 2)); // 1
var_dump(getStatusBit($status, 3)); // 0
var_dump(getStatusBit($status, 4)); // 1
var_dump(getStatusBit($status, 5)); // 1

检查之前阶段的状态位

function checkStatus($status, $stage)
{
    $arr_a = array_map(function ($val) {
        return pow(2, $val + 1) - 1;
    }, range(0, 4));
    $flag = false;
    if ($status == 0 && $stage == 0) {
        $flag = true;
    } else if ($stage >= 1) {
        $flag = isset($arr_a[$stage - 1]) && $status == $arr_a[$stage - 1];
    }
    return $flag;
}

var_dump(checkStatus(0, 0)); // true
var_dump(checkStatus(1, 1)); // true
var_dump(checkStatus(3, 2)); // true
var_dump(checkStatus(7, 3)); // true
var_dump(checkStatus(15, 4)); // true
var_dump(checkStatus(31, 5)); // true
var_dump(checkStatus(15, 5)); // false

 

posted @ 2024-06-20 17:08  carol2014  阅读(3)  评论(0编辑  收藏  举报