Frage zu Boolsche Variable

hallo,

ich habe verschiedene Daten vom ClientSocket empfangen und verarbeite sie in einen Script weiter.
Leider tut es aber bei Boolschen Variablen nicht, was es soll. min Code:

$TemperaturString =   $IPS_VALUE;
    $Temperatur_Array =  explode("  ",  $TemperaturString);
SetValueFloat(36620  ,(floatval($Temperatur_Array [1])-50)/2);
SetValueInteger(35012   ,intval ($Temperatur_Array [2]));
    SetValueBoolean(27545 ,(bool)($Temperatur_Array [2]));
SetValueInteger(58417 ,(int)( $Temperatur_Array [5]));
SetValueBoolean(27196  ,(boolean)($Temperatur_Array [5]));

Die Integer-Werte von $Temperatur_Array [5] und $Temperatur_Array [2]
sind entweder 0 oder -1 und werden richtig erkannt und wiedergegeben.
nach meinem Verständnis müsste 0 = false und -1 = true ergeben.
Leider ist aber auch 0= True.

Die Typumwandlung mit (bool ) bzw. (boolean) ist gleich falsch

Was mache ich falsch??

Gruß

Wolfi

Bei der Umwandlung nach boolean werden folgende Werte als FALSE angesehen:
das boolean FALSE selbst
die Integer 0 (Null)
die Fließkomma-Zahl 0.0 (Null)
die leere Zeichenkette und die Zeichenkette „0“
ein Array ohne Elemente
ein Objekt ohne Mitgliedsvariablen
der spezielle Typ NULL (einschließlich nicht definierter Variablen)
Jeder andere Wert wird als TRUE angesehen (einschließlich jeder Resource).

Ich bezweifle das Dein array eine 0 enthält.

Was zeigt ein print_r($Temperatur_Array); an?

ja, dieser Text ist mir bekannt.
es wird auch eine 0 ausgegeben, bei print oder auch as integervariable.

ich habe das Problem erst einmal gelöst, ist aber nicht so elegant anzusehen. So funktioniert’s:

if ($Temperatur_Array [2]==0){
    $a=false;
		}
		else{
 	 $a=true;
		}
	
 	SetValueBoolean(27545    ,(bool)$a);

aber das funz nicht :


$a= $Temperatur_Array [2];
SetValueBoolean(27545    ,(bool)$a);

dafür das hier:


$a= false;
SetValueBoolean(27545    ,$a);

funktioniert.

irgendwas muß es mit dem Array zu tun haben. Aber was , wie?

Wolfi

Ich machs dir mal eleganter :wink:



$bool_variable = ($Temperatur_Array [2]==0) ? false: true;

 

Probier mal folgendes:


SetValueBoolean(27545    ,settype($Temperatur_Array [2],"bool")); 

Vieleicht ein Leerzeichen im Array?

so gehts auch:


SetValueBoolean(27545    ,($Temperatur_Array [2]==0) ? false: true)); 

aber jetzt juckt es mich noch, warum meine erste Lösung nicht geht. wo ist der Fehler ??
Wolfi

Bei mir funktioniert auch (bool)trim($Temperatur_Array[2]).

Leerzeichen hatte ich auch schon gedacht. Leider nicht.

hallo Horst,

mit trim gehts.

was ist das für eine Funktion?

Wolfi

edit: ok, ich habs, Leerzeichen entfernen, wieder was gelernt! danke an alle

Grüße

Wolfi

Der Teufel liegt im Detail.:wink: