循环数组时出现PHP“非法字符串偏移”错误

时间:2015-10-11 19:11:50

标签: php arrays

我正在使用Amazon API获取一些XML数据,然后通过json_decode()函数传递。

以下是返回的两个数据样本:

[BrowseNodes] => Array
    (
        [Request] => Array
            (
                [IsValid] => True
                [BrowseNodeLookupRequest] => Array
                    (
                        [BrowseNodeId] => 2645269011
                        [ResponseGroup] => BrowseNodeInfo
                    )

            )

        [BrowseNode] => Array
            (
                [BrowseNodeId] => 2645269011
                [Name] => Featured Categories
                [Children] => Array
                    (
                        [BrowseNode] => Array
                            (
                                [0] => Array
                                    (
                                        [BrowseNodeId] => 3741261
                                        [Name] => Cooktops
                                    )

                                [1] => Array
                                    (
                                        [BrowseNodeId] => 3741271
                                        [Name] => Dishwashers
                                    )

                                [2] => Array
                                    (
                                        [BrowseNodeId] => 3741331
                                        [Name] => Freezers
                                    )

                                [3] => Array
                                    (
                                        [BrowseNodeId] => 2399939011
                                        [Name] => Ice Makers
                                    )

                            )

                    )

[BrowseNodes] => Array
    (
        [Request] => Array
            (
                [IsValid] => True
                [BrowseNodeLookupRequest] => Array
                    (
                        [BrowseNodeId] => 3774781
                        [ResponseGroup] => BrowseNodeInfo
                    )

            )

        [BrowseNode] => Array
            (
                [BrowseNodeId] => 3774781
                [Name] => Vitamin D
                [Children] => Array
                    (
                        [BrowseNode] => Array
                            (
                                [BrowseNodeId] => 6936848011
                                [Name] => D3
                            )

                    )

然后我使用此代码获取每个孩子的数据:

if(isset($result['BrowseNodes']['BrowseNode']['Children'])){
$childs = $result['BrowseNodes']['BrowseNode']['Children']['BrowseNode'];
        foreach($childs as $child){
            $browsenodeid = $child['BrowseNodeId'];
            $name = $child['Name'];
        }
    }

第一个示例中的一切正常,但在第二个示例中,我收到以下错误:

警告:非法字符串偏移'BrowseNodeId'

警告:非法字符串偏移'名称'

如果我在第二个例子中回显$ browsenodeid和$ name,它会给我6和D作为输出。

关于我做错了什么的任何想法?我很困惑;对我来说,我在两种情况下循环的数据似乎是相同的,唯一的区别是在第一种情况下,数组有4个元素,在第二种情况下它有1个元素。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我认为原因是:在案例1中:结构为[BrowseNode][0][BrowseNodeId],而在案例2中,[BrowseNode][BrowseNodeId]缺少[0],您可以在数据中修复它。

阅读详情:Illegal string offset Warning PHP