как преобразовать число base10 в массив с переполнением стека

Смысл в следующем: как хранить в одном поле базы данных несколько значений, как, например, данные Optin.

Чтобы сделать это, я должен знать, как кодировать и декодировать значение.
У меня есть массив с различными значениями optin:

$optin = array (
'1' => 'SMS',
'2' => 'Email',
'4' => 'Mail',
'8' => 'AppsPushNotif',
'16' => 'Partners',
'32' => 'Gaming Partners'
);

т.е. я буду хранить, в поле optin:
— «7», если пользователь подписался на SMS, электронную почту и почту (4 + 2 + 1)
или же
— «40» для AppsPushNotif и Gaming_Partners

Я хотел бы найти способ декодировать 7 или 40 значений в массив со значениями массивов optin.

Большое спасибо

PS: спасибо Cyclone за решение:

$output = '';
$value = 40;
$keys = array_keys($food);

foreach($keys as $key) {
if($value & $key) $output .= $food[$key].',';
}

print rtrim($output, ',');

0

Решение

Решение в одну строку распаковать $value на отдельные значения, которые отображаются в виде ключей в $optin:

$value = 40;

$keys = array_map(
function($i) { return 1 << $i; },
array_keys(array_filter(str_split(strrev(decbin($value)))))
);

print_r($keys);

Выход:

Array
(
[0] => 8
[1] => 32
)
0

Другие решения

Это должно работать:

$output = '';
$value = 40;
$keys = array_keys($food);

foreach($keys as $key) {
if($value & $key)
$output .= $food[$key].',';
}
print rtrim($output, ',');
0

По вопросам рекламы [email protected]