Этот код считывает весь файл в массив (используя file()
), а затем обрабатывает каждую строку за раз.Каждая строка разбивается на тег и части содержимого, а затем, в зависимости от того, какой это тег, будет либо временно хранить данные, либо добавлять накопленный контент в общий массив календаря....
$file = "a.txt";
$calendar = [];
$lines = file($file, FILE_IGNORE_NEW_LINES);
$temp = [];
$type = "";
foreach ( $lines as $line ) {
list($tag,$content) = explode(":", $line);
if ( $tag == "END" ) {
$calendar[$type][] = $temp;
$temp = [];
}
else if ( $tag == "BEGIN" ) {
// If already some content, then store it in calendar and reset
if ( count($temp) > 0 ) {
$calendar[$type][] = $temp;
$temp = [];
}
$type = $content;
}
else {
$temp[$tag] = $content;
}
}
Он использует содержимое тега BEGIN для хранения событий различных частей файла вместе с файлом данных примера, который он даст ...
Array
(
[VCALENDAR] => Array
(
[0] => Array
(
[PRODID] => -//Facebook//NONSGML Facebook Events V1.0//EN
[X-WR-CALNAME] => Friends' birthdays
[X-PUBLISHED-TTL] => PT12H
[X-ORIGINAL-URL] => /events/birthdays/
[VERSION] => 2.0
[CALSCALE] => GREGORIAN
[METHOD] => PUBLISH
)
)
[VEVENT] => Array
(
[0] => Array
(
[DTSTART] => 20170106
[SUMMARY] => Gys's birthday
[RRULE] => FREQ=YEARLY
[DURATION] => P1D
[UID] => b1074083@facebook.com
)
[1] => Array
(
[DTSTART] => 20130406
[SUMMARY] => Geo's birthday
[RRULE] => FREQ=YEARLY
[DURATION] => P1D
[UID] => b1004@facebook.com
)
[2] => Array
(
[DTSTART] => 20120602
[SUMMARY] => Flo's birthday
[RRULE] => FREQ=YEARLY
[DURATION] => P1D
[UID] => b100895@facebook.com
)
)
)