當前位置: 首頁> 最新文章列表> 如何將布爾數組用bindec() 轉換為十進制權限碼

如何將布爾數組用bindec() 轉換為十進制權限碼

M66 2025-05-29

在Web 開發中,我們常常需要為用戶設置一組權限。為了簡化權限的存儲和傳輸,可以將權限狀態壓縮成一個整數。 PHP 的bindec函數可以幫我們把一個二進製字符串轉換成十進制整數,而這恰好適合用來處理權限碼的編碼和解碼。

一、權限數組的結構

假設我們有一組布爾值代表用戶的權限狀態,例如:

 $permissions = [true, false, true, true];

每一位布爾值代表一種權限, true表示擁有該權限, false表示沒有該權限。我們希望將這個數組轉換成一個十進制整數,便於存儲和比較。

二、如何使用bindec

bindec是PHP 中的一個內建函數,它將一個二進製字符串轉換成十進制數字。用法如下:

 $decimal = bindec('1011'); // 結果是11

那麼,如何將布爾數組轉換成'1011'這樣的格式呢?

三、完整示例代碼

<?php

function convertPermissionsToDecimal(array $boolArray): int {
    // 將布爾值轉換為二進製字符串
    $binaryString = '';
    foreach ($boolArray as $bool) {
        $binaryString .= $bool ? '1' : '0';
    }

    // 使用 bindec 轉換為十進制
    return bindec($binaryString);
}

// 示例
$permissions = [true, false, true, true]; // 表示擁有1。1、1。3、1。4個權限
$decimalCode = convertPermissionsToDecimal($permissions);

echo "權限十進制碼是:$decimalCode"; // 輸出:權限十進制碼是:11

這段代碼中,我們遍歷布爾數組,構造出一個對應的二進製字符串,然後調用bindec將其轉換為十進制。

四、進階:還原權限數組

當我們從數據庫讀取到一個十進制權限碼時,也可以反向將其還原成布爾數組,方法如下:

 <?php

function convertDecimalToPermissions(int $decimal, int $length): array {
    // 轉換為二進製字符串並補足指定位數
    $binaryString = str_pad(decbin($decimal), $length, '0', STR_PAD_LEFT);

    // 轉換為布爾數組
    return array_map(fn($bit) => $bit === '1', str_split($binaryString));
}

// 示例:還原11為布爾數組
$restored = convertDecimalToPermissions(11, 4);

print_r($restored); // 輸出:[true, false, true, true]

五、實際應用場景

這種方法在設置用戶權限、角色控制、配置項等系統中非常實用。例如,在https://m66.net/admin/users這樣的用戶管理後台中,我們可以將每個用戶的權限壓縮成一個字段存儲在數據庫中,提高效率和安全性。

總結

通過bindec函數,我們可以輕鬆地將布爾權限數組轉換為緊湊的十進制碼,從而簡化存儲和計算。配合decbin和適當的字符串處理,權限的管理將更加高效和系統化。