Смысл в следующем: как хранить в одном поле базы данных несколько значений, как, например, данные 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, ',');
Решение в одну строку распаковать $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
)
Это должно работать:
$output = '';
$value = 40;
$keys = array_keys($food);
foreach($keys as $key) {
if($value & $key)
$output .= $food[$key].',';
}
print rtrim($output, ',');