多級稽核狀態的變更

carol2014發表於2024-06-20

最近要寫一個稽核的功能: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}");

多級稽核狀態的變更

相關文章