Чтение CHMOD как значений с помощью php - PullRequest
1 голос
/ 16 февраля 2011
#   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

Ответы [ 3 ]

3 голосов
/ 16 февраля 2011

Использование побитовых операций в соответствии с рекомендациями.Чтобы получить массив, который вам нужен.

Эта функция вычислит количество бит, необходимое для любого заданного значения, и вернет массив в предложенном вами формате.

Я включил циклот 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));
1 голос
/ 16 февраля 2011

Обычно оно называется битовым полем , и вы можете работать с ним, используя битовые операторы .

0 голосов
/ 16 февраля 2011

Этот метод известен как побитовая операция и используется в php как this .Вот хороший учебник .

...