私は、カレンダーイベントを取得し、ユーザーがこれらのイベントを編集できるようにする編集スクリプトを用意しています。PHP preg_match/undefined offset
イベントには3種類あります。単一発生、毎日繰り返し、および毎週繰り返される。
編集スクリプトは3つのタイプすべてを扱います(データのフォーマットはそれぞれ異なります)。
2種類の定期的なイベントに関しては、preg_matchを使用するまで、どのイベントが処理されているのかわかりません。私は2つのpreg_match関数を持っています。最初は毎日繰り返されるイベント用で、2回目は毎週の定期的なイベント用です。
私のコードは、まずイベント情報を含む文字列を日々のpreg_match関数に渡します。変数が割り当てられている場合は問題ありません。
ただし、変数が割り当てられていない場合は、同じ文字列を週単位のpreg_match関数に渡します。ここでエラーが発生します:
Notice: Undefined offset:
ここでコードを表示します。そもそも
、文字列の2種類:上記の文字列がこれを処理するために、変数$ EVENTTYPE
コードに格納されている
(Daily Recurring Event)
DTSTART;VALUE=DATE:20120306 DTEND;VALUE=DATE:20120307 RRULE:FREQ=DAILY;INTERVAL=3;UNTIL=20120331
(Weekly Recurring Event)
DTSTART;VALUE=DATE:20120201 DTEND;VALUE=DATE:20120201 RRULE:FREQ=WEEKLY;BYDAY=Tu,Fr;UNTIL=20120331
:
recurrence_info_day($eventtype);
$recurrence_type = "daily";
if ($d = false){
recurrence_info_weekly($eventtype);
$recurrence_type = "weekly";
}
function recurrence_info_day($eventtype){
global $eventstart, $eventend, $eventfrequency, $eventinterval, $eventuntil, $formstartdate, $formenddate, $xyz;
$s = $eventtype;
preg_match(
'/^DTSTART;VALUE=DATE:(\d+)\s+DTEND;VALUE=DATE:(\d+)\s+RRULE:FREQ=(\w+);INTERVAL=(\d+);UNTIL=(\d+)/',
$s,
$recinfod
);
$eventstart = $recinfod[1];
$eventend = $recinfod[2];
$eventfrequency = $recinfod[3];
$eventinterval = $recinfod[4];
$eventuntil = $recinfod[5];
$formstartdate = substr($eventstart,4,2)."/".substr($eventstart, 6)."/".substr($eventstart,0,4);
$formenddate = substr($eventuntil,4,2)."/".substr($eventuntil, 6)."/".substr($eventuntil,0,4);
$d = true;
if (!$eventstart){
$d = false;
}
}
//Weekly recurring events
function recurrence_info_weekly($eventtype){
global $eventstart, $eventend, $eventfrequency, $eventdays, $eventuntil, $formstartdate, $formenddate;
$s = $eventtype;
preg_match(
'/^DTSTART;VALUE=DATE:(\d+)\s+DTEND;VALUE=DATE:(\d+)\sRRULE:FREQ=(\w+);BYDAY= (\d+);UNTIL=(\d+)/',
$s,
$recinfow
);
$eventstart = $recinfow[1];
$eventend = $recinfow[2];
$eventfrequency = $recinfow[3];
$eventdays = $recinfow[4];
$eventuntil = $recinfow[5];
$formstartdate = substr($eventstart,4,2)."/".substr($eventstart, 6)."/".substr($eventstart,0,4);
$formenddate = substr($eventuntil,4,2)."/".substr($eventuntil, 6)."/".substr($eventuntil,0,4);
}
私は毎日繰り返されるイベントがあります。このスクリプトは必要なときに機能します。
週刊文字列のpreg_match関数に問題があります - recurring_info_weekly() この関数を単独で呼び出した場合、または上記のコードのように定義されていないオフセットエラーが発生しました。 recurring_info_day()関数が機能します。それはエラーを与える週関数です。
すべてのヘルプは高く評価され、あなたに感謝:)
と言えば、正規表現をデバッグするための素晴らしいツールであるブックマークRegExr。 http://gskinner.com/RegExr/ – Janek