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

0

Смысл: сохранение в одном поле базы данных, несколько значений, например, данных 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, ',');
  • 1
    Это должно работать: $output = ''; $value = 40; $keys = array_keys($food); foreach($keys as $key) { if($value & $key) $output .= $food[$key].','; } print rtrim($output, ',');
  • 0
    Это работает отлично! Спасибо!
Показать ещё 1 комментарий
Теги:
arrays
base
typeconverter

2 ответа

0

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

$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
)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню