Moak
Moak

Reputation: 12885

Reading CHMOD like values with php

#   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

I like the pattern that you can store any combination of the options options in one integer number, and add options by doubling the last number (8, 16 ,32 etc). I'd like to use this method, and I'd like to know if there's a name for it, and what is the fastest simplest method for turning numbers into results similar to this?

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

Upvotes: 1

Views: 252

Answers (3)

Jacob
Jacob

Reputation: 8344

Using bitwise operations as recommended. To get the array you are after.

This function will figure out the number of bit required for any value given and return the array in the format you suggested.

I've included a loop for 0 to 20 to verify.

<?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));

Upvotes: 3

simon
simon

Reputation: 16340

This method is known as bitwise operation, and is used in php like this. Here is a nice tutorial.

Upvotes: 0

Amber
Amber

Reputation: 527488

That's generally referred to as a bit field, and you can work with it using bitwise operators.

Upvotes: 1

Related Questions