Как мне получить доступ к «thumburl», если я не знаю «pageid»?
{
"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;
Это не работает, потому что это объект, а не массив.
Как я могу это сделать?
Ты можешь позвонить get_object_vars
чтобы получить ассоциативный массив свойств объекта, а затем получить первое из них.
$props = array_values(get_object_vars($data->query->pages));
$imageurl = $props[0]->imageinfo[0]->thumburl;
Вы могли бы использовать reset()
чтобы получить первый элемент:
$data = json_decode($json) ;
$elem = reset($data->query->pages) ;
$imageurl = $elem->imageinfo[0]->thumburl ;
Вы можете пройти через него, так что вам не нужен ключ массива, например так:
$pages = (array) $data->query->pages;
foreach($pages as $page) {
$imageinfo = $page->imageinfo[0]->thumburl;
}
Но это даст вам только последний из списка страниц. Так что, если вы знаете, что есть больше страниц, вам нужно хранить эти thumburl в массиве. Или, если вы уверены, что хотите только сначала, просто exit
после первого цикла
Другая альтернатива — декодировать как массив и переиндексировать, чтобы он всегда начинался с 0
:
$result = array_values(json_decode($json, true)['query']['pages'])[0];
Тогда вы можете получить доступ $result['imageinfo']['thumburl']
или добавить его к вышесказанному.