iCalをPHPで直に書き出そうとすると、PHPのソースコードが複雑化しやすいです。そこで、JSON経由またはXML経由で扱う方法を考えました。JSON経由ではJSONが複雑化するので、XML経由を採用しました。
<?php
header('content-type:text/plain');
$vcalendar=new SimpleXMLElement('<VCALENDAR/>');
// $vcalendar内に、XML要素を追加してゆく。
// 「BEGIN:」や「END:」で始まらないプロパティーは、当該要素の属性名にする。
// 「BEGIN:」や「END:」の後に来る文字列は、子XML要素のタグ名にする。
function to_ical($xml){
echo'BEGIN:'.$xml->getName()."\n";
foreach($xml->attributes()as$key=>$value){
echo$key.':'.$value."\n";
}
foreach($xml->children()as$child){
to_ical($child);
}
echo'END:'.$xml->getName()."\n";
}
to_ical($vcalendar);