2011-12-18 4 views
0

Я рассмотрел несколько других вопросов регулярных выражений здесь и на других досках сообщений. Я бил головой о стену, потому что я просто не могу обернуться вокруг этого. (или регулярные выражения в целом)Регулярные выражения и preg_split()

Я вытаскиваю временную метку из базы данных MYSQL. Это автоматически генерируется, поэтому он отформатирован в обычном режиме: 2011-12-17 21:30:56

Я хочу разбить его на массив без использования нескольких взрывов. Я предполагаю, что preg_split() - ответ здесь. Если у вас есть идея лучше, я все уши (хотя мне кажется, что мне нужно выяснить, как использовать регулярные выражения в какой-то момент).

В любом случае, я пытаюсь разделить это на каждом " -" ":" а также " ". После того, как немного чтения, кажется, как класс символов ответ, вот мой код, который просто не работает:

$date_arr = preg_split("/ [- :] /", $order['order_date']); 

Это выводит: Array ([0] => 2011-12-17 21:30:56)

Где я буду неправильно?

+0

Это не обязательно ответьте на свой вопрос о регулярном выражении, но подумали ли вы о простом использовании MySQL o Функция PHP 'date()' для разделения каждого компонента даты вместо использования 'preg_split()'? –

+1

Это будет 'strtotime()'. Проблема с вашим регулярным выражением состоит в том, что он также ищет два пробела в списке разделителей. – mario

ответ

3

Причина ваш preg_split терпит неудачу из-за пространств, окружающих [- :].

Как написано в данный момент, только на " - ", "   " и " : ".

$date_arr = preg_split("/ [- :] /", ...); // original 
$date_arr = preg_split("/[- :]/", ...); // fixed 

Вместо того, чтобы использовать такие функции, как explode и preg_split разделить вашу строку, используйте strtotime и getdate:

print_r (
    getdate (strtotime ("2011-12-17 21:30:56")) 
); 

...

Array 
(
    [seconds] => 56 
    [minutes] => 30 
    [hours] => 21 
    [mday] => 17 
    [wday] => 6 
    [mon] => 12 
    [year] => 2011 
    [yday] => 350 
    [weekday] => Saturday 
    [month] => December 
    [0] => 1324153856 
) 
+0

Я знал, что это должно быть проще, чем я это делал. #facepalm, – drewwyatt

1

У вас есть лишние пробелы в регулярном выражении. Попробуйте это:

preg_split("/[- :]/", '2011-12-17 21:30:56'); 
Смежные вопросы