php разделить строку на массив по дате (гггг-мм-дд)

У меня есть обычный текстовый журнал, который я пытаюсь отформатировать в php. Я хотел бы разделить каждую запись на массив, содержащий дату и текст.

Используя preg_split, я могу это сделать, однако он полностью удаляет дату!

Текстовый файл выглядит примерно так:

2012-01-28

text text text

2012-01-14

some other text

2011-12-07

a previous entry

и т.п.


person Mike Thrussell    schedule 29.01.2012    source источник
comment
Можете ли вы показать нам, как выглядит ваш код preg_split()?   -  person Bojangles    schedule 29.01.2012


Ответы (2)


флаг PREG_SPLIT_DELIM_CAPTURE предотвратит удаление ваших дат при разделении, если дата заключена в скобки в строке шаблона. например.:

$array = preg_split('/(\d{4}-\d{2}-\d{2})/', $text, null, PREG_SPLIT_DELIM_CAPTURE);

Теперь ваши даты находятся в нечетных индексах массива, а ваш контент - в четных индексах.

person Jason Burbage    schedule 29.01.2012

Во что бы то ни стало, вы можете preg_match_all:

$matches = array();
preg_match_all('~(?P<date>\d{4}-\d{2}-\d{2})\s*(?P<text>.*)~ms', $subject, $matches);

Возможно, вам придется немного вмешаться в него, чтобы он соответствовал вашему контенту.

Результат в структуру, подобную

matches => {
    date(3) => {"2012-01-28", ... }
    ...
    text(3) => {"text text text", ...}

который можно легко использовать или преобразовать в пользовательскую структуру.

person Mikulas Dite    schedule 29.01.2012
comment
Идите с ответом jburbage, его решение лучше. - person Mikulas Dite; 29.01.2012