如果我不知道“pageid”,如何访问“thumburl”?
{
"continue": {
"iistart": "2004-12-19T12:37:26Z",
"continue": "||"
},
"query": {
"pages": {
"30260": {
"pageid": 30260,
"ns": 6,
"title": "File:Japanese diet inside.jpg",
"imagerepository": "local",
"imageinfo": [
{
"thumburl": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e1/Japanese_diet_inside.jpg/130px-Japanese_diet_inside.jpg",
"thumbwidth": 130,
"thumbheight": 95,
"url": "https://upload.wikimedia.org/wikipedia/commons/e/e1/Japanese_diet_inside.jpg",
"descriptionurl": "https://commons.wikimedia.org/wiki/File:Japanese_diet_inside.jpg",
"descriptionshorturl": "https://commons.wikimedia.org/w/index.php?curid=30260"
}
]
}
}
}
}
使用php中的多个对象我可以执行此操作imageinfo[0]
但是如果我放$imageurl = $data->query->pages[0]->imageinfo[0]->thumburl;
它不起作用,因为它是一个对象而不是一个数组。
我该怎么做?
答案 0 :(得分:3)
您可以调用get_object_vars
来获取对象属性的关联数组,然后获取第一个。
$props = array_values(get_object_vars($data->query->pages));
$imageurl = $props[0]->imageinfo[0]->thumburl;
答案 1 :(得分:3)
您可以使用reset()
获取第一个元素:
$data = json_decode($json) ;
$elem = reset($data->query->pages) ;
$imageurl = $elem->imageinfo[0]->thumburl ;
答案 2 :(得分:1)
你可以遍历它,所以你不需要像这样的数组键:
$pages = (array) $data->query->pages;
foreach($pages as $page) {
$imageinfo = $page->imageinfo[0]->thumburl;
}
但这只能让你从页面列表中获取最后一个。因此,如果您知道有更多页面,则需要将这些缩略图存储在数组中。或者,如果您确定只想要第一次,只需在第一次循环后exit
。
答案 3 :(得分:1)
另一种方法是将数据解码并重新索引,以便始终从0
开始:
$result = array_values(json_decode($json, true)['query']['pages'])[0];
然后您可以访问$result['imageinfo']['thumburl']
或将其附加到上面。