2012-03-09 16 views
0

私のGoogleカレンダーアカウントにイベントをインポートしようとしましたが、エラーのためコードをインポートできません:Cannot use object of type Event as arrayこれは私のスクリプトの2149行にあります。イベントタイプのオブジェクトを配列として使用できません

$exported_events = array(); 
foreach($events as $event_id => $event) 
{ 
    $event = new Event(); 
    $event->setSummary($event->location); 
    $event->setLocation($event->location); 

    $start = new EventDateTime(); 
    $start->setDateTime($event['starts']); // Line 2149 
    $event->setStart($start); 

    $end = new EventDateTime(); 
    $end->setDateTime((object) $event['ends']); 
    $event->setEnd($end); 

    $attendees = array(); 
    foreach($event['people'] as $i => $person) 
    { 
     $attendee = new EventAttendee(); 
     $attendee->setEmail($person->email); 

     $attendees[] = $attendee; 

     $event->attendees = $attendees; 
    } 

    $createdEvent = $service->events->insert('primary', $event); 

    $calendar_event_id = $createdEvent->getId(); 

    if(!is_null($calendar_event_id)) 
    { 
     $exported_events[] = $event_id; 
    } 
} 

さて、私のforeachループは$eventsアレイの上を歩くように、それは私は$event->locationにそれを変更$event['location']でエラーが発生しました、今では(アレイが印刷されるアレイの項目であるライン2149上でエラーをスローページの下)と私は$event->startsにそれを私にこのエラーをスローされます:Undefined property: Event::$startsを入れても(object) $event['starts']を入れてtはまだ動作しません。

どうすれば動作させることができますか? var_dump($event['starts'])は文字列として返します。各$eventあたりの

配列:

Array 
(
    [location] => Some location in the US 
    [starts] => 2012-03-13T10:00:00 
    [ends] => 2012-03-13T14:00:00 
    [people] => Array 
     (
      [0] => Array 
       (
        [name] => Joan Uton 
        [email] => [email protected] 
       ) 

      [1] => Array 
       (
        [name] => Jack Sparrow 
        [email] => [email protected] 
       ) 

      [2] => Array 
       (
        [name] => Barack Obama 
        [email] => [email protected] 
       ) 

     ) 

) 

答えて

3

あなたは$イベントの2種類を使用しているようです。 1つは配列として、もう1つはオブジェクトとして。

foreach($events as $event_id => $event) // $event is array 
//... 
$event = new Event();     // array is overwritten by new object 

リファクタリングは、1つのタイプに異なる名前を付けることによってリファクタリングします。

+1

'foreachの($ EVENT_ID => $イベントとして$イベントを){ $イベント=新しいイベント();' - あなたがオブジェクトで配列を上書きするところです。 – Niko

+0

Nikoが正しいです。変数をオブジェクトと配列の両方として使用すると、常にエラー(ArrayAccessインタフェース)につながるわけではありません。 OPが変数を上書きしているのは事実です。 – webbiedave

+0

明確にするために引用を修正しました – marfis

0

変数を上書きしています。あなたの$event変数の1つの名前に変更します。

foreach($events as $event_id => $event) 
{ 
    $event = new Event(); // You just overwrote the above variable. Use a different name! 
関連する問題