1
#   Permission
7   read and write and execute (1+2+4)
6   read and write (2+4)
5   read and execute (1+4)
4   read only 
3   write and execute (1+2)
2   write only
1   execute only 
0   none

我喜欢这种模式,您可以将选项选项的任意组合存储在一个整数中,并通过将最后一个数字(8、16、32 等)加倍来添加选项。我想使用这种方法,我想知道它是否有名称,以及将数字转换为类似结果的最快最简单的方法是什么?

array(1=>false,2=>true,4=>true);//6
array(1=>true,2=>true,4=>true,8=>true);//15
4

3 回答 3

3

按照建议使用按位运算。得到你所追求的阵列。

此函数将计算出任何给定值所需的位数,并以您建议的格式返回数组。

我已经包含了一个 0 到 20 的循环来验证。

<?php

function getBitArray($value) {
    $numberOfBits = ceil(log($value + 1, 2));
    $result = array();
    $bit = 1;
    for($i = 0; $i < $numberOfBits; $i++) {
        $result[$bit] = ($value & $bit) == $bit;
        $bit <<= 1;
    }
    return $result;
}

for($i = 0; $i < 20; $i++)
    var_dump(getBitArray($i));
于 2011-02-16T05:25:51.603 回答
1

这通常被称为位域,您可以使用位运算符来处理它。

于 2011-02-16T05:20:42.190 回答
0

这种方法称为按位运算,在 php 中就是这样使用的。这是一个很好的教程

于 2011-02-16T05:22:24.607 回答