Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Перевод массива в десятичный код и обратно


Автор: Gold Dragon 14.3.2012, 08:07
Есть массив типа
array(
0=>0,
1=>1,
2=>0,
3=>1,
4=>0,
5=>1
)

Необходимо перевести это массив в десятичный вид и потом проделать обратную процедуру.

Прямой перевод простой
- массив в строку
- строку в десятичный код

А вот с обратным что-то проблема.. у меня получается куча функций.. Очень рад был бы услышать разные варианты решения

Автор: MoLeX 14.3.2012, 08:12
то есть должно получиться такое
Цитата

001120314051

Автор: ksnk 14.3.2012, 09:12
http://ru.php.net/manual/en/function.base-convert.php
?


Цитата(Gold Dragon @  14.3.2012,  08:07 Найти цитируемый пост)
Есть массив типа
array(

Код

$number=array(
0=>0,
1=>1,
2=>0,
3=>1,
4=>0,
5=>1
);

echo base_convert(implode (array_reverse($number)),2,10);


Код

$_num=42;
print_r(array_reverse(str_split(base_convert($_num,10,2),1)));

Автор: Gold Dragon 14.3.2012, 10:57
MoLeX, нет. Могут быть только единица или ноль. т.е. в конечном итоге двоичная система

Например:

Исходная строка получается - 010101 (получаем из массива)
Десятичная получается - 21
и потом должна получится опять строка 010101
ну и в конечно итоге массив


ksnk, малость не понял твой код.. исходное число может быть любое и 010101 и 0001000.  И не проще тогда воспользоваться bindec() и decbin()

Автор: gta4kv 14.3.2012, 11:27
поменяй base_convert на bindec & decbin, результат один и тот же. какая разница?

Автор: ksnk 14.3.2012, 11:51
Цитата(Gold Dragon @  14.3.2012,  10:57 Найти цитируемый пост)
 малость не понял твой код

Мне казалось, что элемент с индексом 0 - младший бит двоичного числа. Если не так, то нужно выкинуть array_reverse из моего примера. Ну и да, заменить base_convert на bindec/decbin если других вариантов размерности не будет.

Автор: Gold Dragon 14.3.2012, 12:11
Цитата(ksnk @  14.3.2012,  12:51 Найти цитируемый пост)
заменить base_convert на bindec/decbin
я знаю эти функции  smile 
То ли я не могу правильно объяснить, то ли второе smile

имеем: array("0","0","1","1","0","0") т.е. строку "001100" 
и после bindec/decbin мы получим строку "1100"
и следовательно: array("1","1","0","0")

а это разные варианты.. Я просто хочу найти оптимальный вариант добавлять "нули" в массив



Автор: skyboy 14.3.2012, 12:26
я так понимаю, ты знаешь, сколько у тебя всего элементов должно получиться? ну, в смысле, сколько нулей надо добавить?
если да, то decbin + str_pad + str_split
если нет, то я офигею smile


Автор: Gold Dragon 14.3.2012, 12:31
вот я тормоз!!!!.. можно ведь сначала дополнить строку, а уж потом перевести в массив  smile 

Всё. вопрос снимается...

а я мучаюсь и думаю как в начало массива добавить нули и получается безумный какой-то код smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)