我的JSON文件格式如下:
{
"library": [{
"image": "css/covers/rainbow6siege.jpg",
"title": "Tom Clancy's Rainbow Six: Siege",
"system": ["PC", "Xbox-360", "Xbox One", "PS4"],
"genre": ["Shooter"],
"pegi_rating": "18",
"developer": "Ubisoft",
"release_year": "2015",
"max_team": "5"
}, {
"image": "css/covers/thedivision.jpg",
"title": "Tom Clancy's The Division",
"system": ["PC", "Xbox-360", "Xbox One", "PS4"],
"genre": ["Shooter", "MMO", "Action RPG"],
"pegi_rating": "15",
"developer": "Ubisoft",
"release_year": "2016",
"max_team": "3"
}]
}我已经连接到数据库,获取了文件的内容,对其进行了解码,并试图将每个变量分配给其关联的JSON变量。使用代码:
$jsonData = file_get_contents('js/json/library.json');
$data = json_decode($jsonData, true);
$gameImage = $data['image'];我只使用了一个示例,但是我得到了以下错误:
Notice: Undefined index: image in C:\MAMP\htdocs\iniDb.php on line 21我不明白我哪里出了问题。
发布于 2016-03-02 21:50:17
您的$data是一个多维数组,由第一级的关联数组(“库”键)和第二级的两个数字数组(0和1是键)组成。下面的代码应该这样做:
$data['library'][0]['image']发布于 2016-03-02 21:47:06
由于使用了, true选项,一旦解码了JSON,结果的输出如下所示:
$data = [
"library" => [
[
"image" => "css/covers/rainbow6siege.jpg",
"title" => "Tom Clancy's Rainbow Six => Siege",
"system" => ["PC", "Xbox-360", "Xbox One", "PS4"],
"genre" => ["Shooter"],
"pegi_rating" => "18",
"developer" => "Ubisoft",
"release_year" => "2015",
"max_team" => "5"
],
[
"image" => "css/covers/thedivision.jpg",
"title" => "Tom Clancy's The Division",
"system" => ["PC", "Xbox-360", "Xbox One", "PS4"],
"genre" => ["Shooter", "MMO", "Action RPG"],
"pegi_rating" => "15",
"developer" => "Ubisoft",
"release_year" => "2016",
"max_team" => "3"
]
]
]由此可见,$data['image']是找不到的!
你必须这样做:
foreach ($data as $member) {
foreach ($member['library'] as $library) {
foreach ($library as $element) {
echo $element['image'];
}
}
}发布于 2016-03-02 21:57:14
如果您想迭代已解码的json数组集合,您可以这样做:
// your json here
$data = json_decode('{
"library": [{
"image": "css/covers/rainbow6siege.jpg",
"title": "Tom Clancy\'s Rainbow Six: Siege",
"system": ["PC", "Xbox-360", "Xbox One", "PS4"],
"genre": ["Shooter"],
"pegi_rating": "18",
"developer": "Ubisoft",
"release_year": "2015",
"max_team": "5"
}, {
"image": "css/covers/thedivision.jpg",
"title": "Tom Clancy\'s The Division",
"system": ["PC", "Xbox-360", "Xbox One", "PS4"],
"genre": ["Shooter", "MMO", "Action RPG"],
"pegi_rating": "15",
"developer": "Ubisoft",
"release_year": "2016",
"max_team": "3"
}]
}'
, true);
foreach ($data['library'] as $library)
{
echo "<pre>";
foreach ($library as $key => $value)
{
echo "<span style='color: #cc0000;'>$key</span> = ";
echo trim(print_r($value, true)) ."\r\n";
}
echo "</pre><hr>";
}产出:

例如,如果您想要每个库项的标题,这就是您要做的:
foreach ($data['library'] as $library)
{
echo "title = ". $library['title'];
}https://stackoverflow.com/questions/35758505
复制相似问题