无法读取具有相同名称的嵌套数组

时间:2015-10-21 14:50:56

标签: php arrays json

我在PHP中使用大量嵌套数组。数据最初是作为使用json_decode true转换的JSON数据对象启动的。到目前为止,我已经能够在没有太多问题的情况下导航生成的嵌套数组。我遇到了以下问题。

Scores
    Team1
        Info1
        Info2
            Element1
            Element2
        **Info3**
            Element1
                Item1
                Item2
            Element2
                Item1
                Item2
        **Info3**
            Element1
                Item1
                Item2
            Element2
                Item1
                Item2

问题是Info3是两个不同的数组,它们有我们需要提取的数据集合,但它们具有相同的确切名称。运行类似:

echo $Scores['Team1']['Info3'][0]['Item1']

工作到一定程度;但它只捕获 last Info3实例的元素项。忽略了链上的Info3个实例。我也尝试过具体指定我想要的数组实例,如下所示:

$echo $Scores['Team1'][3]['Element1']['Item1']

这与上述非常相似但由于某种原因不起作用。好像Element数组是键控的,但Info数组不是。我还尝试了foreach循环Team1并仅在值等于Info3时采取行动,但同样没有欢乐。更复杂的是,Info3数组的数量本身是可变的,数字0-5,所以我的捕获必须是动态的。

编辑:根据要求添加JSON代码段。

"scores": {
                    "team1": {
                        "info1": 0,
                        "info2": [
                            {
                                "element1": 1,
                                "element2": 144568658
                            },
                            {
                                "element1": 2,
                                "element2": 132020087
                            }
                        ]
                        ,
                        "info3": [
                            {
                                "item1": 5462,
                                "item2": 1
                            }
                        ]
                        ,
                        "info3": [
                            {
                                "item1": 5608,
                                "item2": 1
                            },
                            {
                                "item1": 5611,
                                "item2": 1
                            }
                        ]
                        ,
                        "info3": [
                            {
                                "item1": 5127,
                                "item2": 1
                            }
                        ]

                    },
                    "team2": { etc... 

编辑:感谢所有花时间回答的人。似乎问题不是我的编码尝试,而是JSON源格式错误。

1 个答案:

答案 0 :(得分:1)

根据Jujunol的评论,我们为糟糕的JSON数据提出了这个解决方法:

$info3Count = substr_count($jsonString, '"info3": [');
$c = 1;
while ($c <= $info3Count) {
    $pos = strpos($jsonString, '"info3": [');
    $jsonString = substr_replace($jsonString, '"info3-'.$c.'": [', $pos,
        strlen('"info3": ['));
    $c++;
}

基本上,我们将JSON作为原始文本导入,在info3个实例中搜索JSON,并在-n的末尾附加n,其中info3是一个简单的计数器。这使得json_decode的每个实例都足够独特,以便成功name

相关问题