Puppollo
6/24/2014 - 2:30 PM

Закодировать массив id в число code([0,1,2,3,4])=31 Раскодировать число в массив id decode(31) = [0,1,2,3,4]

Закодировать массив id в число code([0,1,2,3,4])=31 Раскодировать число в массив id decode(31) = [0,1,2,3,4]

<?php
function Decode($res)
{
    $ids = [];
    while ($res > 0) {
        $x = 1;
        $y = $res;
        while ($y > 0) {
            $x <<= 1;
            $y >>= 1;
        }
        $x >>= 1;
        $ids[] = intval(log($x, 2));
        $res -= $x;
    }
    return $ids;
}
<?php
function Code($ids)
{
    $res = 0;
    if (is_array($ids)) {
        foreach ($ids as $id) {
            if (is_numeric($id)) {
                $res += 1 << $id;
            }
        }
    } elseif (is_numeric($ids)) {
        $res = 1 << intval($ids);
    }
    return $res;
}