Ошибка «Невозможно использовать строковое смещение как массив»

Не могу понять, что здесь не так. Читайте, что люди говорят здесь: http://informationideas.com/news/2006/06/14/fatal-error-cannot-use-string-offset-as-an-array-in/ и здесь: Нельзя использовать смещение строки как массив в php

У меня есть print_r() – фактические значения в $entries (поступающие из Календаря Google), и все в порядке.

  foreach ( $entries as $e ) { $info = array(); // added to see if pre-declaration helps $info = array( $e[ 'title' ], $e[ 'gd:when attr' ][ 'startTime' ], $e[ 'gd:where attr' ][ 'valueString' ], $e[ 'content' ] ); } 

Что я делаю не так?

Сброс $entries :

 Array ( [id] => http://www.google.com/calendar/feeds/u879een48cs77cp2rv7s05f5ps%40group.calendar.google.com/public/full/aev64a1c7kou9ige6n2mulm8mo [published] => 2009-12-31T15:34:47.000Z [updated] => 2009-12-31T15:34:58.000Z [category attr] => Array ( [scheme] => http://schemas.google.com/g/2005#kind [term] => http://schemas.google.com/g/2005#event ) [category] => [title attr] => Array ( [type] => text ) [title] => Happy New Year! [content attr] => Array ( [type] => text ) [content] => [link] => Array ( [0 attr] => Array ( [rel] => alternate [type] => text/html [href] => http://www.google.com/calendar/event?eid=YWV2NjRhMWM3a291OWlnZTZuMm11bG04bW8gdTg3OWVlbjQ4Y3M3N2NwMnJ2N3MwNWY1cHNAZw [title] => alternate ) [0] => [1 attr] => Array ( [rel] => self [type] => application/atom+xml [href] => http://www.google.com/calendar/feeds/u879een48cs77cp2rv7s05f5ps%40group.calendar.google.com/public/full/aev64a1c7kou9ige6n2mulm8mo ) [1] => ) [author] => Array ( [name] => New Orleans Parents Guide to Public Schools ) [gd:comments] => Array ( [gd:feedLink attr] => Array ( [href] => http://www.google.com/calendar/feeds/u879een48cs77cp2rv7s05f5ps%40group.calendar.google.com/public/full/aev64a1c7kou9ige6n2mulm8mo/comments ) [gd:feedLink] => ) [gd:eventStatus attr] => Array ( [value] => http://schemas.google.com/g/2005#event.confirmed ) [gd:eventStatus] => [gd:where attr] => Array ( [valueString] => ) [gd:where] => [gd:who attr] => Array ( [email] => u879een48cs77cp2rv7s05f5ps@group.calendar.google.com [rel] => http://schemas.google.com/g/2005#event.organizer [valueString] => New Orleans Parents Guide to Public Schools ) [gd:who] => [gd:when attr] => Array ( [endTime] => 2010-01-01 [startTime] => 2009-12-31 ) [gd:when] => [gd:transparency attr] => Array ( [value] => http://schemas.google.com/g/2005#event.opaque ) [gd:transparency] => [gCal:anyoneCanAddSelf attr] => Array ( [value] => false ) [gCal:anyoneCanAddSelf] => [gCal:guestsCanInviteOthers attr] => Array ( [value] => true ) [gCal:guestsCanInviteOthers] => [gCal:guestsCanModify attr] => Array ( [value] => false ) [gCal:guestsCanModify] => [gCal:guestsCanSeeGuests attr] => Array ( [value] => true ) [gCal:guestsCanSeeGuests] => [gCal:sequence attr] => Array ( [value] => 2 ) [gCal:sequence] => [gCal:uid attr] => Array ( [value] => aev64a1c7kou9ige6n2mulm8mo@google.com ) [gCal:uid] => ) 

Моя ставка заключается в том, что либо

  • $ entries не является массивом
  • один или несколько из $e не являются массивами

пытаться

 foreach ( $entries as $e ) { $info = array(); // added to see if pre-declaration helps if (is_array($e)) // only go on if $e is actually an array $info = array( $e[ 'title' ], $e[ 'gd:when attr' ][ 'startTime' ], $e[ 'gd:where attr' ][ 'valueString' ], $e[ 'content' ] ); } 

Если вы хотите сделать это действительно правильно, вы проверяете каждый ключ $e («startTime» и т. Д.), Сначала используя isset() или array_key_exists() .

вам не нужен foreach

 $info = array( $entries[ 'title' ], $entries[ 'gd:when attr' ][ 'startTime' ], $entries[ 'gd:where attr' ][ 'valueString' ], $entries[ 'content' ] ); 

Чтобы преодолеть эту ошибку, сначала проверьте, будет ли ее массив или сеть, а затем элементы массива манипулировать