Seit Tagen sitze ich vor diesem blöden Problem ein mehrdimensionals Array auszulesen und komme keinen Schritt weiter. Ich habe schon mehrfach Anwendungen dafür und kann keine umsetzen, weil ich an diesen blöden Array scheitere. Auch sämtliche Dokus machen mich nicht schlauer, ihr seid meine letzte Hoffnung:
Das geht so weiter bis zu den momentan vorhandenen 76 Einträgen und kommt aus einem Archive Händler. Was will ich erreichen? Ich will jedes Mal wenn der Wert Value 0 war, den Zeitstempel rausholen und so eine Liste in eine Variable schreiben, in der die Zeitstempel drin stehen, wenn halt jedes Mal 0 war…
Aber ich komme schon nicht an die Werte ran…brauche ich hier eine doppelte „for“ Schleife oder eine „foreach“ Schleife? Und wenn ja, wie code ich diese richtig?? Hilft mir jemand weiter
eindimensionale Schleife mit Zähler reicht da aus. Der Ansatz sieht so aus ( Achtung! Ungetestet !) :
Dein Array habe ich „deinarray()“ genannt.
$liste=array(); // Deine zu generierende Liste
$i=1; // Zähler für Deine Liste
FOR ($count=0; $count < count($deinarray); $count++)
{
IF ( $deinarray[$count] ['Value']==0 )
{
$liste[$i]=$deinarray[$count]['TimeStamp'];
$i++;
}
}
$liste ist ein eindimensionales Array und enthält nun $i Elemente.
oja, super, das funktioniert. Darauf wär ich selber nie gekommen. Ich verstehe zwar den Code jetzt wo ihn sehe, aber ihn selbst zu entwerfen fällt mir brutal schwer. Ich versuche jetzt mal selber das einfache Array weiterzuverarbeiten!
Dank dir! Unter Umständen könnt aber schon noch die eine oder andere Frage auftauchen
Ich verstehe in IPS wirklich schon viel, aber mit den Arrays stehe ich immer wieder auf Kriegsfuß und habe viele Sachen deswegen schon nicht umsetzen können. Wenn ich die mal durchschaut hätte, könnte ich schon viel mehr basteln als bisher…mal sehen…danke, hab das mal auf 0 geändert.
So, ich habe es nun weit hingebracht, das ich aus dem eindimensionalen Array einen Wert in eine Variable schreibe, aber leider nur einen. Ich habe dafür die foreach Schleife benutzt, dacht das wär das Einfachste…falscher Ansatz? Das Script schaut so aus:
<?
$archiveHandlerID = IPS_GetInstanceIDByName("Archive Handler", 0);
$array = AC_GetLoggedValues($archiveHandlerID, 25727 /*[Hardware Devices\W&T Keller\WuT Input 1\Kalkschutzanlage]*/, 1, time(), 0);
$liste=array(); // Deine zu generierende Liste
$i=0; // Zähler für Deine Liste
for ($count=0; $count < count($array); $count++)
{
IF ( $array[$count] ['Value']==0 )
{
$liste[$i]=$array[$count]['TimeStamp'];
$i++;
}
}
foreach ($liste as $stamps)
{
$stamps = date('j.m.o h:i ',$stamps)."=> Störung/Salzmangel"."<br>";
}
SetValueString(47105 /*[Test\Störungen Kalkschutzanlage]*/ , $stamps);
print_r($stamps);
?>
Die Ausgabe aber leider nur so:
20.02.2012 08:06 => Störung/Salzmangel
Da sollten aber eigentlich noch 10 andere Einträge stehen…
ja klar, $stamps enthält den letzten Wert aus der Schleife. $stamps ist eine ganz normale eindimensionale Variable und kann nur einen Wert annehmen, auch wenn Du in einer Schleife hinter einander 10 x einen anderen drüber schreibst.
Schreib doch mal genau, was Du erreichen willst. Der Ansatz aus einem 2-dimensionalen Array erst einmal ein eindimensionales mit Ergebnissen zu machen und dann weiterzuverarbeiten ist schon etwas merkwürdig. Vielleicht können wir Dir besser helfen, wenn wir Dein Ziel kennen.
Ich möchte aus dem Archivehandler auslesen, wann der Wert „Value“ auf 0 war. Wenn das so war, möchte ich mir die Zeit dieses Events rausholen und in eine Variable schreiben, die dann im Webfront darstellbar ist. Es reicht mir eine Liste die 10 Zeilen lang ist. Den Zeitstempel in ein lesbares Format umwandeln hatte ich ja selbst schon fertig gebracht
Ganz oben hatte ich ja schon die Ausgabe des Arrays (nur den Anfang, ganzes Array hat 76 Einträge) aus dem Archivehandler angegeben…
So habe ich in einer Liste die letzten 10 Störeinträge meiner Entkalkungsanlage dargestellt, somit weiß ich, wann ich das letzte Mal Salz nachfüllen musste.
Achtung ! Variable 47105 muss vom Type String / Textbox sein. Anschließend im Webfront auf diese Variable verlinken.
$liste ist eine normale Stringvariable, die immer länger wird, aber die Ergebnisse mit einem Zeilenumbruch
voneinander trennt. Bei der Visualisierung hast Du dann mehrere Zeilen. Das müsste gehen…
ich möchte ein Array auslesen und schaffe es einfach nicht eine Rückmeldung zu erhalten. Das ist auch mein erster Berührungspunkt mit Arrays, habe mich schon mehrere Tage damit beschäftigt und bin auch der Meinung, dass dieses Thema mir hätte helfen müssen, stehe aber einfach auf dem Schlauch.
Ich möchte in meinem Sonos System die Radiosender und Playlisten in eine HTML Box schreiben. Wenn ich die ProfilAssoziationen abfrage erhalten ich schonmal folgendes Array:
Ich vermute mal, dass es sich hierbei um ein „verschachteltes“ Array handelt. Ich benötige ja nun die Informationen aus [Value] und [Name] .
Idealerweise erhalte ich in die HTML Box die Auflistung:
Value Name
1 Das Inselradio Mallorca
2 N-JOY 94.9 (Top 40/Pop)
3 NDR 2 Schleswig-Holstein 98.3 (Adult Contemporary)
4 R.SH
Nein eben nicht. Value ist der Wert der Assoziation und nicht die Position der Assoziationen. Es kann auch sein, dass es Lücken bei den Values gibt und dann funktioniert das über die Position nicht.
Somit wäre das korrekt:
$stationvalue = $station[„Value“];
Michael