これを解釈する独自のスクリプトを作成するのは簡単です。
$lines = explode("\r\n", $string);
$parsed = array();
foreach($lines as $line){
list($key, $value) = explode(":", $line, 2);
$parsed[$key] = $value;
}
すぐに、スクリプトが意味をなさなくなるポイントが 1 つありますが、それは開始キーの重複です。
これに対処するには、次の行に沿って何かを行うことができます。
$lines = explode("\n", $string);
$parsed = array();
$current = &$parsed;
foreach($lines as $line){
list($key, $value) = explode(":", $line, 2);
if ($key == "BEGIN") {
$parsed[$value] = array();
$current = &$parsed[$value];
} else {
$current[$key] = $value;
}
}
これにより、次のような出力が得られます
Array
(
[PRODID] => -//Microsoft Corporation//Outlook 10.0 MIMEDIR//EN
[VERSION] => 2.0
[METHOD] => PUBLISH
[X-CALENDARSERVER-ACCESS] => PUBLIC
[VTIMEZONE] => Array
(
[TZID] => Pacific Time
)
[STANDARD] => Array
(
[DTSTART] => 20081101T020000
[RRULE] => FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
)
)
上記の例では (begin ブロックの後のすべてが、BEGIN の値に基づいてサブ配列のプロパティとして設定されていることに注意してください)。
実際に見てみる
iCalendar パーサーの代替実装については、この質問を見ることができます