php按日期(yyyy-mm-dd)将字符串拆分为数组


php split string into array by date (yyyy-mm-dd)

我有一本纯文本日记,我正在尝试用php格式化。我想把每个条目分成一个包含日期和文本的数组。

使用preg_split我可以做到这一点,但它完全删除了日期!

txt文件看起来像这样:

2012-01-28
text text text
2012-01-14
some other text
2011-12-07
a previous entry

等等。

只要日期在模式字符串中用括号括起来,PREG_SPLIT_DELIM_CAPTURE标志将防止在拆分时删除日期。例如:

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

现在,您的日期在数组的奇数索引中,内容在偶数索引中。

无论如何,您都可以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", ...}

其可以容易地被利用或转换成定制的scstructure。