Hilfe bei Aufbereitung von JSON Daten

Hallo
ich arbeitet zur Zeit an Daten in JSON Format von einen externen Gateway aus. Das klapt alles auch so weit, solange sich die Strucktur auf der Gegenseite nicht ändern.
Hier einmal die Ausgabe in JSON

Array
(
    [1] => stdClass Object
         
        (
            [id] => 14
            [properties] => stdClass Object
                (
                    [batteryLevel] => 81
                    [value] => false
                )
        )

    [2] => stdClass Object
        (
            [id] => 26
            [properties] => stdClass Object
                (
                    [energy] => 0.14
                    [power] => 0.00
                    [value] => false
                )
        )

    [3] => stdClass Object
        (
            [id] => 27
            [properties] => stdClass Object
                (
                    [energy] => 1.35
                    [power] => 0.00
                    [userDescription] => 
                    [value] => false
                )
        )

    [4] => stdClass Object
        (
            [id] => 29
            [properties] => stdClass Object
                (
                    [energy] => 0.00
                    [power] => 0.56
                    [value] => true
                )
        )
)

Die Aufbereitung der Daten mache ich aktuell so:

//Schalter Licht    ID26
$status    = ($result[2]->properties->value);
$verbrauch = ($result[2]->properties->energy);
$leistung  = ($result[2]->properties->power);
SetValue ($ID_213a,$status);
SetValue ($ID_213b,$verbrauch);
SetValue ($ID_213c,$leistung);


//Schalter Lüfter  ID27
$status    = ($result[3]->properties->value);
$verbrauch = ($result[3]->properties->energy);
$leistung  = ($result[3]->properties->power);
SetValue ($ID_214a,$status);
SetValue ($ID_214b,$verbrauch);
SetValue ($ID_214c,$leistung);

//Sensor Treppenhaus unten   ID14,ID42,ID43
$status       = ($result[1]->properties->value);
$battery      = ($result[1]->properties->batteryLevel);
$temperature  = ($result[7]->properties->value);
$brightness   = ($result[8]->properties->value);
SetValue ($ID_301a,$status);
SetValue ($ID_301b,$battery);
SetValue ($ID_301c,$temperature);
SetValue ($ID_301d,$brightness);

Das klappt auch alles.
Mein Problem ist jetzt, wenn sich die Strucktur auf den Gateway ändert dann ändert sich auch teilweise die Reihefolge im Array
Die ID ist immer eindeutig im Zusammenhang mit den Daten.
z.B Ausgabe 1 | Ausgabe 2 | Ausgabe 3
$result[2] -> id26 | $result[1] -> id26 | $result[2] -> id26
$result[3] -> id27 | $result[2] -> id27 | $result[4] -> id27
$result[1] -> id14 | $result[9] -> id14 | $result[8] -> id14

Wie kann man in einer Schleife den Index [i] entsprechend auswerten. Die Werte zu den id sind immer korrekt.
Wer kan mir helfen

Thomas

Hallo,

zB so:


<?php

foreach ($result as $r) {
    switch ($r->id) {
        case '14':
            SetValue($ID_301a, $r->properties->value);
            SetValue($ID_301b, $r->properties->batteryLevel);
            break;
        case '??':
            SetValue($ID_301c, $r->properties->value);
            break;
        case '??':
            SetValue($ID_301d, $r->properties->value);
            break;
        case '27':
            SetValue($ID_214a, $r->properties->value);
            SetValue($ID_214b, $r->properties->energy);
            SetValue($ID_214c, $r->properties->power);
            break;
        default:
            break;
    }
}

Schleife alternativ auch so:



for ($i = 0; $i < count($result); $i++) {
    $r = $result[$i];
...
}

Gruß
demel

@demel

Danke. Jetzt klappt es. Ich hatte in der Zwischenzeit auch einen änhlichen Ansatz gefunden.

$anz_eta = (count ($result));  //Anzahl Devices
for ($e=0;$e<$anz_eta;$e++)
{
    if(($result[$e]->id) == 26)
    {
        //Schalter7.1  Licht     ID26
        $status    = ($result[$e]->properties->value);
        $verbrauch = ($result[$e]->properties->energy);
        $leistung  = ($result[$e]->properties->power);
        SetValue ($ID_213a,$status);
        SetValue ($ID_213b,$verbrauch);
        SetValue ($ID_213c,$leistung);
    }
}

Es funktioniert beides.

Nochmals Danke
Thomas