1

I have a plain text journal I'm trying to format in php. I'd like to split each entry into an array containing date and text.

Using preg_split I can do this, however it removes the date altogether!

The txt file looks something like this:

2012-01-28

text text text

2012-01-14

some other text

2011-12-07

a previous entry

etc.

Bojangles
  • 99,427
  • 50
  • 170
  • 208
Mike Thrussell
  • 4,175
  • 8
  • 43
  • 59

2 Answers2

2

By all means you can preg_match_all:

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

Might need to meddle with it a bit to fit your content.

Results into a structure like

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

which can easily be utilized or transformed into custom sctructure.

Mikulas Dite
  • 7,790
  • 9
  • 59
  • 99
2

the PREG_SPLIT_DELIM_CAPTURE flag will prevent your dates from being removed when you split, as long as the date is parenthesized in your pattern string. e.g.:

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

Now your dates are in the odd indices of the array and your content is in the even indices.