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

オプションオプションの任意の組み合わせを1つの整数に格納し、最後の数字を2倍にしてオプションを追加できるパターンが好きです(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 に答える