Смысл: сохранение в одном поле базы данных, несколько значений, например, данных 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, ',');
Это должно работать:
$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, ',');