php “不能使用字符串偏移量作为数组”错误

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2058635/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 04:50:55  来源:igfitidea点击:

"Cannot use string offset as an array" error

phparrays

提问by jerrygarciuh

Can't figure what is wrong here. Read what folks are saying here: http://informationideas.com/news/2006/06/14/fatal-error-cannot-use-string-offset-as-an-array-in/and here: Cannot use string offset as an array in php

无法弄清楚这里出了什么问题。在这里阅读人们在说什么:http: //informationideas.com/news/2006/06/14/fatal-error-cannot-use-string-offset-as-an-array-in/和这里:不能使用字符串偏移作为 php 中的数组

I have print_r()-ed the actual values in $entries(coming from Google Calendar) and they are all fine.

我已经print_r()$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' ] 
                     );
     }

What am I doing wrong?

我究竟做错了什么?

Dump of $entries:

转储$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] => [email protected]
            [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] => [email protected]
        )

    [gCal:uid] => 
)

回答by Pekka

My bet is that either

我敢打赌

  • $entries is not an array
  • one or multiple of $eare not arrays
  • $entries 不是数组
  • 一个或多个$e不是数组

try

尝试

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

If you want to do it really properly, you check for each key of $e("startTime" and so on) first using isset()or array_key_exists().

如果您想真正正确地执行此操作,请$e首先使用isset()或检查(“startTime”等)的每个键array_key_exists()

回答by antpaw

you dont need the foreach

你不需要 foreach

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

回答by Debangshu

To overcome this error at first check whether its an array or net then do array elements manipulat

为了克服这个错误,首先检查它是一个数组还是网络然后做数组元素操作