PHP разбить строку на массив по дате (гггг-мм-дд) - PullRequest
1 голос
/ 29 января 2012

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

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

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

2012-01-28

text text text

2012-01-14

some other text

2011-12-07

a previous entry

и т. Д.

Ответы [ 2 ]

2 голосов
/ 29 января 2012

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

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

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

2 голосов
/ 29 января 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", ...}

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

...