2010-10-04 3 views
1

Для забавного проекта я хотел сделать двоичные часы в PHP, поэтому в основном для простоты я использовал date("H:m:s");, чтобы получить время в строковом формате, а затем использовал str_split(); для разделения каждой строковой буквы на массив.PHP: не может отличить строку от int?

Мой код находится здесь, чтобы работать с ним:

$time = str_split($time); 
//I tried $time = array_map(intval, $time); here but no dice 
$tarray = Array(
    //hh:mm:ss = [0][1][3][4][6][7] 
    str_pad(decbin((int)$time[0]), 8, STR_PAD_LEFT), //I tried casting to (int) as well 
    str_pad(decbin($time[1]), 8, STR_PAD_LEFT), 
    str_pad(decbin($time[3]), 8, STR_PAD_LEFT), 
    str_pad(decbin($time[4]), 8, STR_PAD_LEFT), 
    str_pad(decbin($time[6]), 8, STR_PAD_LEFT), 
    str_pad(decbin($time[7]), 8, STR_PAD_LEFT), 
); 

Независимо от того, я стараюсь эти два, чтобы решить эту проблему, в результате массив, например, следующим образом (с десятичной рядом с ним для ясности):

10000000 -> 128 
10000000 -> 128 
10000000 -> 128 
00000000 -> 0 
10000000 -> 128 
10010000 -> 144 

Почему это не 1-9 в двоичном формате?

+0

Вы забыли задать вопрос. – zerkms

+0

@zerkms, слишком занят письменно подробно. : P Спасибо. – John

ответ

3

аргумент str_pad - тип пэда.

Вы сделали это аргументом 3rd.

третий аргумент, что использовать для заполнения в вашем случае является '0' так попробовать это:

str_pad(decbin($time[1]), 8, '0',STR_PAD_LEFT) 
          ^^^ 

С этого исправления на месте все отлично работает.

Working link

+0

Да, да, большое вам спасибо. Я писал функции вместе так быстро, я копировал + вставлял строку 6 раз, распространяя проблему, прежде чем смог ее найти. Ты спас мне здравый смысл. :) – John

0

Я не уверен, но вы пробовали intval()?

+0

Я написал как комментарий в своем коде изначально, что я использовал array_map с ним, он почему-то не работает. Я попробую еще раз вручную, но .. EDIT: Нет, вручную все равно не трогаю его. – John

Смежные вопросы