Nur bestimmte Variablen ausgeben

Morgen zusammen,

ich habe 5 Variablen (Fensterstatus), alle haben einen Standardwert (geschlossen).

Jetzt möchte per Skript den Status prüfen und nur die eine oder mehrere Variablen ausgeben, deren Status nicht Standard ist.

Ich würde es mit >10 if-Bedingungen hinbekommen, um jeden Einzelfall abzudecken, aber geht das auch einfacher?

Könnt ihr mir ein Stichwort geben?

Möchte das für eine Statusabfrage beim Verlassen des Hauses nutzen

Gruß oekomat

foreach?


$fenster = array(12345,23456,34567,45678,56789);
$ausgabe = "Folgende Fenster sind offen: ";

foreach ($fenster as $f) {
      if ($f == (was auch immer du prüfen willst) {
              $ausgabe .= $f;
      }
}

ok, danke. Mit Array könnte ich probieren.

Funktioniert mit deinem Beispiel erstmal nicht, da ich Fensterbezeichnung und den Status zusammenführen muss.

Kann mir hier jemand helfen? Ich lasse mit 2 Arrays und „Combine“ ein neues Array erstellen.


$r = array();
    if ($fenster_bad_gast <> 'geschlossen')
    $r[] = 'Bad Gast';

    if ($fenster_hwr <> 'geschlossen')
    $r[] = 'H W R';

    if ($fenster_bad <> 'geschlossen')
    $r[] = 'Bad';

$f = array();
    if ($fenster_bad_gast <> 'geschlossen')
    $f[] = $fenster_bad_gast;

    if ($fenster_hwr <> 'geschlossen')
    $f[] = $fenster_hwr;

    if ($fenster_bad <> 'geschlossen')
    $f[] = $fenster_bad;

$c = array_combine($r, $f);

es liefert die Ausgabe

Array
(
    [H W R] => geöffnet
)

weil nur das Fenster im HWR offen ist. Ich bekomme es aber nicht hin, das in einen String zu schreiben. Mit

$ergebnis = implode(’, ', $c);
echo $ergebnis;

bekomme ich immer nur „geöffnet“ ohne den key HWR.

Ich würde das Beispiel von Titus verfolgen:


<?php

$fenster = [
    24052 => 'Fenster 1',
    53129 => 'Fenster 2'];

$ausgabe = "Folgende Fenster sind offen: ";

$fensterOffen = false;

foreach ($fenster as $id => $name) {
    if (GetValue($id)) {
        $ausgabe      .= $name . ' (' . GetValueFormatted($id) . '), ';
        $fensterOffen = true;
    }
}

if ($fensterOffen) {
    echo substr($ausgabe, 0, -2);
} else {
    echo 'alle Fenster sind zu';
}

liefert z.B:

Folgende Fenster sind offen: Fenster 1 (Gekippt), Fenster 2 (Gekippt)

Gruß

Burkhard

Ich sage nur eines: Danke
Genau das habe ich benötigt. Angepasst kann mir Alexa jetzt beim Verlassen des Hauses alle offenen Fenster nennen.

Hallo Burkhard, ich muss das hier nochmal aufgreifen.

Wenn ich innerhalb des Skriptes mit variablen arbeite und diese im Array verwenden will, bekomm ich Fehler. Mein Skript sieht vorerst so aus:


<?php

$tester = true;
$tester2 = false;

    $temperatur = array($tester => "Peter", $tester2 => "Liisa");

    $ausgabe_difftemp = " und Temperaturdifferenzen bei: ";

    $difftemperatur = true;

    foreach ($temperatur as $id => $name_difftemp)
				
                {if (GetValue($id))
                    {$ausgabe_difftemp      .= $name_difftemp . ' ...! ';
        			$difftemperatur = false;}
                }

Die Variablen $tester und $tester2 werden vorhergehend im Skript mit Bedingungen auf false oder true gesetzt. In der Zeile „{if (GetValue($id))“ sagt er, dass die Variable nicht existiert.

Die Funktion GetValue() erwartet eine VariablenID. Du übergibst ihr aber ‚true‘ bzw. ‚false‘.

Mir ist nicht klar, was das Skript bewirken soll.

Das ist der Auszug aus einem Alexa Skript. Ich prüfe Temperaturdifferenzen. Wenn die Temperatur mehr als ein Grad vom Soll abweicht stelle ich eine Variable auf false. Diese Variable ordne ich mit foreach den Räumen zu und lasse mir nur die ansagen, so die Abweichung vorliegt.

   If ((($temp_peter - $solltemp_peter) > 1) or (($temp_peter - $solltemp_peter) < -1))
    {SetValue($tester2, true);}

Das ganz funktioniert mit extra angelegten Variablen.

Jetzt möchte ich aber nicht deshalb eine extra Variable anlegen, sondern alles im Skript abfrühstücken.

$tester und $tester2 sind die gefüllten Variablen mit dem Ergebnis aus der o.g. Abfrage, die jetzt den Räumen zugeordnet werden sollen.

Dann vielleicht in etwa so:

<?php

$tester = true;
$tester2 = false;

$temperatur = ['Peter' => $tester, 'Liisa' => $tester2];

$ausgabe_difftemp = ' und Temperaturdifferenzen bei: ';

$difftemperatur = false;

foreach ($temperatur as $raum => $difftemp){
    if ($difftemp)) {
        $ausgabe_difftemp .= $raum . ' ...! ';
        $difftemperatur    = true;
    }
}

Hallo Burkhard,

frohes gesundes neues Jahr vorab. Deine Empfehlung hat geholfen, Test war erfolgreich. Vielen Dank für die Hilfe.