- var_dump: documentation ( source)
- hex2bin: documentation ( source)
- preg_replace: documentation ( source)
- unpack: documentation ( source)
<?php
$availablePieces = [];
$bitfield = hex2bin(preg_replace('(\s)', '', 'ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffe0'));
$bytes = unpack('N*', $bitfield);
foreach ($bytes as $index => $byte) {
$i = $index - 1; // since pack is 1-indexed
$availablePieces[($i * 8) + 0] = ($byte & 0b10000000) !== 0;
$availablePieces[($i * 8) + 1] = ($byte & 0b01000000) !== 0;
$availablePieces[($i * 8) + 2] = ($byte & 0b00100000) !== 0;
$availablePieces[($i * 8) + 3] = ($byte & 0b00010000) !== 0;
$availablePieces[($i * 8) + 4] = ($byte & 0b00001000) !== 0;
$availablePieces[($i * 8) + 5] = ($byte & 0b00000100) !== 0;
$availablePieces[($i * 8) + 6] = ($byte & 0b00000010) !== 0;
$availablePieces[($i * 8) + 7] = ($byte & 0b00000001) !== 0;
}
var_dump($availablePieces);