无法将字符串偏移量用作数组错误

3
无法确定这里出了什么问题。请查看这里的其他人所说的内容:http://informationideas.com/news/2006/06/14/fatal-error-cannot-use-string-offset-as-an-array-in/在php中无法将字符串偏移量用作数组
我已经使用print_r()输出了来自Google日历的$entries实际值,它们都很好。
    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中print_r值的结果吗?这样我们就可以知道entires的结构是什么。 - Daniel Bingham
你能展示一下 print_r($entries); 打印出来的内容吗? - antpaw
编辑以添加$entries的转储; 谢谢! - jerrygarciuh
2
哈哈,我赢了我的赌注!我什么时候能得到我的啤酒? :) - Pekka
说真的,这只是一个日历条目。如果你在它上面运行foreach,你会得到所有数组成员。我认为你实际想要的是遍历多个这样的条目。然后你的代码就能正常工作了。 - Pekka
嗨,Pekka,随时来新奥尔良,我会请你喝啤酒!顺便说一下,代码确实会迭代许多条目。那个循环在我的片段之外。整个东西现在运行得非常好!谢谢! - jerrygarciuh
3个回答

19

我打赌要么

  • $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' ] );
}

如果你想做得非常规范,你需要先使用 isset() 或者 array_key_exists() 检查 $e 的每个键(比如 "startTime" 等)。


1
谢谢Pekka!这不仅解决了问题,还揭示了我在错误假设下操作代码时的其他问题。非常感激。 - jerrygarciuh

1

你不需要使用foreach

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

如果日历恰好有多个条目,我不需要它吗? - jerrygarciuh

0

要克服此错误,首先检查它是一个数组还是网络,然后进行数组元素操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接