我几乎将数据添加到我的文件中。但我正在尝试找出确切的语法..任何帮助高度赞赏..
我的PHP脚本
$inp = file_get_contents('jsontrail.json');
$tempArray = json_decode($inp, true);
//adding to the matchid index of matches array
$matchid=3;
$arrne['games']['matches'][$matchid]['winner'] ="winner";
$arrne['games']['matches'][$matchid]['player1id'] ="player1id";
$arrne['games']['matches'][$matchid]['player2id'] ="player2id";
array_push($tempArray,$arrne );
$jsonData = json_encode($tempArray);
file_put_contents('jsontrail.json', $jsonData);
print_r( $inp);
我有效的json文件
{
"players": [
{
"name": "Moldova",
"image": "/Images/Moldova.jpg",
"roll_over_image": "tank.jpg"
},
/* repeat */
],
"games": [
{
"matches": [
{
"player1id": 0,
"player2id": 1,
"winner": "*"
},
/* repeat */
]
},
{
"matches": [
{
"player1id": 0,
"player2id": 1,
"winner": "*"
},
/* repeat */
]
}
]
}
我正在尝试将数据添加到已存在的数组
游戏中的- > first_match_array-> mymatch_id_input-> push_data_here。
执行后,这就是我在屏幕上的内容
{
"players":
[
{
"name":"Moldova",
"image":"\/Images\/Moldova.jpg",
"roll_over_image":"tank.jpg"
},
/* repeat */
]
,
"games":
[
{
"matches":
[
{
"player1id":0,
"player2id":1,
"winner":"*"
},
/* repeat */
]
},
{
"matches":
[
{
"player1id":0,
"player2id":1,
"winner":"*"
},
/* repeat */
]
}
],
"0":
{
"games":
{
"matches":
[
{
"3":
{
"winner":"winner",
"player1id":"player1id",
"player2id":"player2id"
}
}
]
}
}
}
以上是通过array_push得到的...下一个我用array_merge
获得的代码{
"players":
[
{
"name":"Moldova",
"image":"\/Images\/Moldova.jpg",
"roll_over_image":"tank.jpg"
},
/* repeat */
],
"games":
[
{
"matches":
[
{
"player1id":0,
"player2id":1,
"winner":"*"
},
/* repeat */
]
},
{
"matches":
[
{
"player1id":0,
"player2id":1,
"winner":"*"
},
/* repeat */
]
}
],
"0":
{
"games":
{
"matches":
[
{
"3":
{
"winner":"winner",
"player1id":"player1id",
"player2id":"player2id"
}
}
]
}
},
"1":
{
"games":
{
"matches":
[
{
"3":
{
"winner":"winner",
"player1id":"player1id",
"player2id":"player2id"
}
}
]
}
}
}
请帮忙,看似简单但无法找到确切的代码来执行此操作。请帮助..
答案 0 :(得分:0)
问题是你的格式错误的json字符串,它构造不正确,试试这个
$str = '{
"players": [
{
"name": "Moldova",
"image": "/Images/Moldova.jpg",
"roll_over_image": "tank.jpg"
},
{
"name": "Georgia",
"image": "/Images/georgia.gif",
"roll_over_image": "tank.jpg"
},
{
"name": "Belarus",
"image": "/Images/Belarus.gif",
"roll_over_image": "tank.jpg"
},
{
"name": "Armenia",
"image": "/Images/armenia.png",
"roll_over_image": "tank.jpg"
},
{
"name": "Kazahstan",
"image": "/Images/kazahstan.gif",
"roll_over_image": "tank.jpg"
},
{
"name": "Russia",
"image": "/Images/russia.gif",
"roll_over_image": "tank.jpg"
},
{
"name": "Ukraine",
"image": "/Images/ukraine.png",
"roll_over_image": "tank.jpg"
},
{
"name": "Uzbekistan",
"image": "/Images/uzbekistan.gif",
"roll_over_image": "tank.jpg"
}
],
"games": [
{
"matches": [
{
"player1id": 0,
"player2id": 1,
"winner": "*"
},
{
"player1id": 2,
"player2id": 3,
"winner": "*"
},
{
"player1id": 4,
"player2id": 5,
"winner": "*"
},
{
"player1id": 6,
"player2id": 7,
"winner": "*"
},
{
"player1id": 0,
"player2id": 2,
"winner": "*"
},
{
"player1id": 4,
"player2id": 6,
"winner": "*"
},
{
"player1id": 0,
"player2id": 4,
"winner": 4
}
]
},
{
"matches": [
{
"player1id": 0,
"player2id": 1,
"winner": "*"
},
{
"player1id": 2,
"player2id": 3,
"winner": "*"
},
{
"player1id": 4,
"player2id": 5,
"winner": "*"
},
{
"player1id": 6,
"player2id": 7,
"winner": "*"
},
{
"player1id": 0,
"player2id": 2,
"winner": "*"
},
{
"player1id": 4,
"player2id": 6,
"winner": "*"
},
{
"player1id": 0,
"player2id": 4,
"winner": 0
}
]
}]}';
如果您使用它,它将起作用。
答案 1 :(得分:0)
你搞乱了关键指令,
$arrne['games']['matches'][$matchid]['winner']
应该是
$arrne['games'][$matchid]['matches']['winner']
击> <击> 撞击>
你错过了一个数字索引,
$arrne['games']['matches'][$matchid]['winner']
应该是
$arrne['games'][]['matches'][$matchid]['winner']
或者
$arrne['games'][$matchid]['matches'][]['winner']
因为在您的原始JSON中,您有
"games": [
{
"matches": [
/* ... */
]
},
{
"matches": [
/* ... */
]
}
所以结构是games->[index]->matches->[index]
,而不是games->matches->[index]
。
此外,简单的array_merge
不起作用,您需要array_merge_recursive
;
示例代码:
$json=<<<JSON
...
JSON;
$tempArray=json_decode($json,true);
print_r($tempArray);
$matches=array(
"games"=>array(
3=>array(
"matches"=>array(
array(
"winner"=>"winner",
"player1id"=>"player1id",
"player2id"=>"player2id"
)
)
)
)
);
print_r(array_merge_recursive($tempArray,$matches));
修改强>
$tempArray["games"]
和$tempArray["games"][index]["matches"]
都是数字数组,因此array_merge
会追加,而不是覆盖。如果您需要修改现有值而不是添加新值,请直接修改
$tempArray["games"][index]["matches"][$matchid]["winner"]="winner";