我在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源格式错误。
答案 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
。