Daten verschiedener Arrays auslesen (JSON->PHP)

Hallöchen!

Heute ein wohl sehr seltsames Problem.
Ich versuche derzeit mehrere Datensätze aus einer JSON-Datei auslesen.
Um es etwas besser zu erklären, es geht um folgende JSON-Datei:
https://api.xivdb.com/character/9065567?pretty=1

Dort um den Punkt data->classjobs.
Wie man sieht gibt es da mehrere Unterpunkte mit Zahlen als Nenner.
Nun möchte ich zB sämtliche dieser Unterpunkte durchsuchen und habe diesbezüglich schon einmal angefangen ein PHP-Script anzulegen:

<?php
$json= "https://api.xivdb.com/character/9065567";
$options = [
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false,
    ],
];
$xiv_info = file_get_contents($json, false, stream_context_create($options));
$xiv_info = json_decode($xiv_info, true);

$xiv_jobs = $xiv_info['data']['classjob'];

while($row = $xiv_jobs) {
	$get_gla = file_get_contents(''.$row->icon.'');
	$save_gla = file_put_contents(''.$row->name.'.png', $get_gla);
}
?>

So klappt das ja derzeit noch nicht, da ich derzeit keine Idee habe, wie er zB dann:

$xiv_info['data']['classjob']['1'];

wählen würde.
Gibt es da eine Möglichkeit?

Vielleicht liegt es an der Uhrzeit, aber ich verstehe nicht ganz, wo genau das Problem liegt… Hilft dir eventuell das:

Strings, die einen gültigen Integer enthalten, werden zum entsprechenden Integer umgewandelt. Beispielsweise wird der Schlüssel “8” tatsächlich unter 8 gespeichert. Andererseits wird “08” nicht umgewandelt, da dies kein gültiger Ganzzahlwert ist.

Mfg :wink:

Ich bin mir nicht ganz sicher was genau du erreichen moechtest, aber da es in der eine loop passiert, vermute ich du moechtest alle class icons downloaden?

<?php

$json= "https://api.xivdb.com/character/9065567";
$options = [
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false,
    ],
];

$xiv_info = file_get_contents($json, false, stream_context_create($options));
$xiv_info = json_decode($xiv_info, true);

$xiv_jobs = $xiv_info['data']['classjobs'];

foreach ($xiv_jobs as $job) {
    $iconUrl = $job['data']['icon'];
    file_put_contents($job['name'] . '.png', file_get_contents($iconUrl));
}

attribute accessor (->) ist nicht moeglich, da es sich bei den daten nicht um objects handelt.

snwflake hat es richtig erkannt :)!
Ich möchte mit dem Script die Klassen-Icons downloaden und abspeichern, da ich in Zukunft so den “Selbstwartungsaufwand” verringern könnte.
Im Endeffekt ist mein Problem das im JSON das ganze ja so verschachtelt wird:

data->classjobs->ID->name/icon

Die ID ist halt nicht einfach 1 bis X, sondern zufällig angegeben (etwas doof leider).
Daher wollte ich ja, das das Script sich selbst eben diese ID’s besorgt und den loop eben damit durchführt :).

Konnte diesbezüglich nur keine Infos im Netz finden, ob man das umsetzen könnte.

Das snippet welches ich gepostet habe tut genau dies.

// loope durch das array indem die classjobs geparsed wurden
// und packe das aktuelle element in die variable $job
foreach ($xiv_jobs as $job) {
    // parse die icon-url aus dem aktuellen element welches dank
    // foreach in $jobs gepackt wurde
    $iconUrl = $job['data']['icon'];
   
    // speicher das file
    file_put_contents($job['name'] . '.png', file_get_contents($iconUrl));
}

Der Vorteil von foreach sollte auf der hand liegen. Es ist egal wie einzelne array-elemente bezeichnet sind, es wird einfach durch-gelooped.

Vielen dank nochmal an die Antworten, wenn auch spät von mir jetzt. Da einiges dazwischen kam hust Stormblood.
Der Tipp von snwflake hat Tatsächlich funktioniert. Das sollte das ganze in Zukunft dann auch etwas mehr automatisieren :).

Gut das du nochmal geantwortet hast, lohnt XIV?

Also meiner Meinung nach, auf alle Fälle, erstes Online-Rollenspiel das mich seid 3 Jahren ununterbrochen in seinen bann zieht ;)!