Rolf B: json_decode auslesen und übergebn an Variable und einzeln abfragen

Beitrag lesen

Hallo Sukan,

wie Du merkst, duzen wir uns hier 😀.

Was Objekte und Arrays grundsätzlich sind, ist Dir bekannt? Ich will Dich mit der Frage nicht ärgern, sondern herausfinden, ob noch jemand ein paar Erklärungen nachlegen muss oder nicht. Zum Selberlesen gibt's hier einen Haufen Informationen zum Thema PHP Klassen und Objekte. Auch auf Englisch, falls es dir lieber ist, php.net hat oben rechts den Schalter für Sprachen.

Dein Dump beginnt so:

object(stdClass)#45 (1) {
  ["ArrivalBoard"]=>
  object(stdClass)#4 (2) {
    ["noNamespaceSchemaLocation"]=>
    string(77) "https://open-api.bahn.de/bin/rest.exe/v1.0/xsd?name=hafasRestArrivalBoard.xsd"
    ["Arrival"]=>
    array(20) {
      [0]=>
###################################
      object(stdClass)#5 (9) {
        ["name"]=>
        string(8) "ICE 1515"
        ["type"]=>
        string(3) "ICE"

D.h. was die Bahn Dir da geliefert hat, ist ein komplexes Gebilde aus ineinander geschachtelten Objekten und Arrays. Ganz außen hast Du ein stdClass-Objekt. Dieses Objekt hat die Eigenschaft ArrivalBoard. Vielleicht gibt es noch mehr, das ist in deinem Dump nicht ersichtlich.

Innerhalb des ArrivalBoard sehen wir zwei Eigenschaften. Eine heißt noNamespaceSchemaLocation und ist wohl eher technisch zu sehen. Die andere heißt Arrivals und die interessiert Dich.

Die Arrivals sind nun ein Array. Und zwar ein Array von weiteren stcClass-Objekten, diese Objekte haben Eigenschaften wie name, type oder JourneyDetailRef - wobei eine JourneyDetaiRef wiederum ein stdClass-Objekt ist mit Eigenschaften wie ref. Andere sehen wir nicht mehr.

Diesen Stufen musst Du einzeln nachsteigen. Von $jsonArray zu ArrivalBoard, von ArrivalBoard zu Arrivals, von Arrivals zu einem Array-Element, vom Array-Element zu Eigenschaften wie name oder JourneyDetailRef. Dazu wendest Du immer wieder die von dedlfix genannten Operatoren an. Das kann man - wenn man testet und nicht genau weiß was passiert - einzeln machen und die Schritte in Variablen zwischenspeichern. Das meinte dedlfix mit „durchhangeln“.

Wenn man aber weiß, dass man ein Objekt in einem Objekt erreichen will, kann man das Speichern in einer Variablen auch weglassen. Statt

$b = $a->b;
$c = $b->c;

kann man - wenn man $b nicht weiter braucht - auch kürzer schreiben

$c = $a->b->c;

So, nun hast Du hoffentlich das Handwerkszeug, das Du brauchst.

Rolf

--
sumpsi - posui - clusi