Autor | Zpráva | ||
---|---|---|---|
janky Profil |
Dobrý den, nevím si rady při vypsání dat z výcerozměrného pole.
Tento kód mi vypíše všechny prvky v poli. Já bych ale potřeboval jen konkrétní prvek v poli. $data = file_get_contents('https://api.scryfall.com/cards/named?fuzzy=fireball'); $items = json_decode($data,true); foreach ($items['image_uris'] as $item) { echo $item.'<br>'; } Chtěl bych získat řádek podle klíče ["small"] v poli. |
||
Radek9 Profil |
#2 · Zasláno: 30. 11. 2018, 10:13:21
janky:
Prostě k němu takhle přistoupíš: echo $items['image_uris']['png'] // Místo png může být libovolný jiný klíč |
||
janky Profil |
#3 · Zasláno: 30. 11. 2018, 10:19:42
Radek9:
Takový kód mi vypisuje warning. $data = file_get_contents('https://api.scryfall.com/cards/named?fuzzy=fireball'); $items = json_decode($data,true); echo "<pre>"; var_dump($items); echo "</pre>"; foreach ($items['image_uris'] as $item) { echo $item['image_uris']['small'].'<br>'; } |
||
blaaablaaa Profil |
#4 · Zasláno: 30. 11. 2018, 10:25:27
Ten foreach dej pryč a nech tam:
echo $items['image_uris']['small'].'<br>'; |
||
Tomášeek Profil |
blaaablaaa:
Není tu zdrojové pole, ale spíše echo $item['small'].'<br>'; Foreach asi bude chtěný a správný. |
||
janky Profil |
#6 · Zasláno: 30. 11. 2018, 10:43:52
Ale co když mi ten json vrátí několik desítek polí a já budu chtít z každého získat obrázek. Toho bych potřeboval docílit.
|
||
Radek9 Profil |
janky:
JSON na uvedené adrese je evidentně jeden jedinný objekt. Ten má atribut image_uris , ve kterém je evidentně také jeden jedinný objekt. Jeho atributy potom obsahují jednotlivé adresy obrázků. Pokud chceš vypsat všechny, použij cyklus z [#1]. Pokud chceš vypsat jeden konkrétní (png nebo small apod.), použij kód z [#2] (bez toho cyklu).
Jestli tohle nestačí, tak lépe popiš problém. Načítáš i data v jiném formátu z jiných adres? |
||
janky Profil |
Radek9:
Ano tam byl pouze jediný, to byl asi špatný příklad. Načítám pouze ve formátu JSON z této adresy: api.scryfall.com... Podle filtru který si navolím. Výsledná URL z které načítám data pak může vypadat https://api.scryfall.com/cards/search?q=frame%3Amooneldrazidfc: Například toto mi načte 14 objektů (každý má vlastní image_uris a spostu dalších informací).
Já bych ty informace chtěl vypsat přes foreach, konkrétně třeba obrázky ["image_uris"]["small] . Tak aby získal 14 URL adres obrázků.
Jenže co když mi ten dotaz vrátí jen jeden objekt - pak bych to musel řešit podmínkou? |
||
Radek9 Profil |
janky:
V případě, že to vrátí víc výsledků, jsou uloženy jako pole v atributu data a dají se iterovat. Následně každý tento item obsahuje pole card_faces , jehož itemy teprve mají položku image_uris . Takže nějak takhle:
$data = file_get_contents('https://api.scryfall.com/cards/search?q=frame%3Amooneldrazidfc'); $json = json_decode($data, true); foreach ($json['data'] as $item) { echo 'Name: ' . $item['name'] . '<br>'; foreach ($item['card_faces'] as $cardFace) { echo $cardFace['image_uris']['small'] . '<br>'; } } |
||
DarkMeni Profil |
#10 · Zasláno: 30. 11. 2018, 13:34:29
janky:
„Jenže co když mi ten dotaz vrátí jen jeden objekt - pak bych to musel řešit podmínkou?“ Já bych to řešil tak, že bych ten jednodušší výsledek (jen 1 kartu) přizpůsobil na ten složitější tvar objektu (více karet, několik card_faces), a pak vždy pracoval jakoby s tím složitějším objektem. <?php $data = file_get_contents('https://api.scryfall.com/cards/search?q=frame%3Amooneldrazidfc'); $items = json_decode($data,true); // Adaptace objektu... // $items -> array of cards $items = isset($items["data"]) ? $items["data"] : array($items); // $items -> array of cards -> card_faces if(!isset($items[0]["card_faces"])) $items[0]["card_faces"] = array(array("image_uris" => $items[0]["image_uris"])); // Prochazeni vicerozmerneho pole... foreach($items as $card) { $card_name = isset($card["name"]) ? $card["name"] : "Uknown card"; echo "<b>Card name:</b> $card_name<br><br>"; foreach($card["card_faces"] as $i => $face) { if(isset($face["name"])) { $face_id = $i + 1; $face_name = isset($face["name"]) ? $face["name"] : "Uknown name"; echo "<b>Card face #$face_id:</b> $face_name<br>"; } foreach($face["image_uris"] as $type => $uri) { echo "$type: $uri<br>"; } echo "<br>"; } echo "<br><hr><br>"; } ?> |
||
Časová prodleva: 5 let
|
0