<?php
$ar = [0, 2, 3, 7, 16, 42];
if( $maxValue >= pow(2, 32)) { return; // больше, чем влезет в один ключ в Redis
}
$maxBytes = ceil( $maxValue / 8); foreach($ar AS $bitNumber) {
$byteNumber = floor( $bitNumber / 8); $addon = 1 << ( 7 - $bitNumber % 8);
$byteChar = substr( $bin, $byteNumber, 1); $byteChar = chr( $addon | ord( $byteChar)); }
// return $bin;
// test output
echo PHP_EOL;
PD9waHAKJGFyID0gWzAsIDIsIDMsIDcsIDE2LCA0Ml07CiRtYXhWYWx1ZSA9IG1heCggJGFyKTsKaWYoICRtYXhWYWx1ZSA+PSBwb3coMiwgMzIpKSB7CglyZXR1cm47IC8vINCx0L7Qu9GM0YjQtSwg0YfQtdC8INCy0LvQtdC30LXRgiDQsiDQvtC00LjQvSDQutC70Y7RhyDQsiBSZWRpcwp9CiRtYXhCeXRlcyA9IGNlaWwoICRtYXhWYWx1ZSAvIDgpOwokYmluID0gc3RyX3JlcGVhdCggY2hyKDB4MCksICRtYXhCeXRlcyk7CmZvcmVhY2goJGFyIEFTICRiaXROdW1iZXIpIHsKCSRieXRlTnVtYmVyID0gZmxvb3IoICRiaXROdW1iZXIgLyA4KTsKCSRhZGRvbiA9IDEgPDwgKCA3IC0gJGJpdE51bWJlciAlIDgpOwoJJGJ5dGVDaGFyID0gc3Vic3RyKCAkYmluLCAkYnl0ZU51bWJlciwgMSk7CgkkYnl0ZUNoYXIgPSBjaHIoICRhZGRvbiB8IG9yZCggJGJ5dGVDaGFyKSk7CgkkYmluID0gc3Vic3RyX3JlcGxhY2UoICRiaW4sICRieXRlQ2hhciwgJGJ5dGVOdW1iZXIsIDEpOwp9Ci8vIHJldHVybiAkYmluOwoKLy8gdGVzdCBvdXRwdXQKZm9yKCAkaT0wOyAkaTxzdHJsZW4oJGJpbik7ICRpKyspIHByaW50ZiggIiUwOGIgIiwgb3JkKHN1YnN0cigkYmluLCRpLDEpKSk7CmVjaG8gUEhQX0VPTDsK