Array umwandeln

Hallo zusammen,

ich stehe gerade komplett auf dem Schlauch und benötige mal einen Denkanstoß.
ich habe ein 3 dimensionales Arry wie hier :

Array
(
    [result] => Array
        (
            [0] => Array
                (
                    [SERVICE_NAME] => ping4
                    [HOST_NAME] => Zarafa
                    [SERVICE_CURRENT_STATE] => 0
                    [HOST_CURRENT_STATE] => 0
                    [HOSTGROUP_NAME] => linux-servers
                    [HOST_IS_PENDING] => 0
                    [SERVICE_IS_PENDING] => 0
                )

            [1] => Array
                (
                    [SERVICE_NAME] => ping4

Dieses müßte ich nun umwandeln in ein 2 dimensionales Array ( das wäre noch lösbar ) und dann
muss ich quasi jedem Hostnamen eine Variable im IPS zuordnen. Ich denke das könnte man auch mit einem Array machen, wo ich den Namen einer Variablen zuweise oder gibt es da einen eleganteren Weg.

Bin leider nicht der PHP Profi, vielleicht kann mir ja jemand nur einen Anstoß geben :-).

Gruss Thomas

Hi Thomas!

Warum so umständlich? Lass das Array doch wie es ist.

Mach einfach eine FOR-Schleife in einer FOR-Schleife. Die 1. Schleife geht das Array durch auf Ebene1 (0,1,2,…) und die 2. Schleife geht dann die einzelnen Einträge (SERVICE_NAME, HOST_NAME, …) durch.

Und dann jeweils durch eine Funktion wie diese hier schicken:

function CreateVariableByName($ParentID, $VarName, $VarTyp, $VarProfile = "", $VarActionScript = "") {
	$VarID = @IPS_GetVariableIDByName($VarName, $ParentID);
   if($VarID === false) {
		$VarID = IPS_CreateVariable($VarTyp);
      IPS_SetParent($VarID, $ParentID);
      IPS_SetName($VarID, $VarName);
      IPS_SetInfo($VarID, "This variable was created by script #".$_IPS["SELF"]);
      if($VarProfile !== "") {
			IPS_SetVariableCustomProfile($VarID, $VarProfile);
		}
		if($VarActionScript !== "") {
			IPS_SetVariableCustomAction($VarID, $VarActionScript);
		}
	}
   return $VarID;
}

…mit $VarName z.B. den Key von „HOST_NAME“ usw. (Die Funktion gibt dir die Variablen ID zurück und diese kannst du dann einfach mit SetValue und dem Wert von „HOST_NAME“ direkt aus dem Array füllen)
Weiteres Beispiel: $array[0][„HOST_NAME“] ist der Wert „Zarafa

Edit: Alternativ kannst du auch eine komplette Funktion schreiben, welche die Variable erstellt, falls nicht vorhanden und direkt mit Daten befüllt bzw. die Daten aktualisiert.

Klingt kompliziert, ist es aber eigentlich gar nicht :slight_smile:

Grüße,
Chris

Hallo Chris,

ich sag doch ich brauchte einen Anstoß :slight_smile:

Werde es heute Abend testen und hoffentlich Erfolg melden !

Gruss Thomas

Hier noch 2 Beispiele :slight_smile:

<?

$test[0] = array("HOST_NAME"=>"server1", "SERVICE_NAME"=>"ips1");
$test[1] = array("HOST_NAME"=>"server2", "SERVICE_NAME"=>"ips2");

//print_r($test);

$hostname1 = $test[0]["HOST_NAME"];
echo "Hostname1 = $hostname1"."
";

$servicename1 = $test[0]["SERVICE_NAME"];
echo "Servicename1 = $servicename1"."
";

$hostname2 = $test[1]["HOST_NAME"];
echo "Hostname2 = $hostname2"."
";

$servicename2 = $test[1]["SERVICE_NAME"];
echo "Servicename2 = $servicename2"."
";

?>
<?

$array[0] = array("HOST_NAME"=>"server1", "SERVICE_NAME"=>"ips1");
$array[1] = array("HOST_NAME"=>"server2", "SERVICE_NAME"=>"ips2");

//print_r($test);

$i = 0;
foreach ($array as $key) {
	$hostname = $array[$i]["HOST_NAME"];
	echo "Hostname$i = $hostname"."
";
	$servicename = $array[$i]["SERVICE_NAME"];
	echo "Servicename$i = $servicename"."
";
	$i++;
}

?>

Grüße,
Chris

Hallo Chris,

danke nochmals für deine Hilfe. Ich hab eine etwas andere Lösung gefunden, aber das Wichtigste ist , es
funktioniert . Wenn man einmal wieder drin ist gehts …

Ist übrigens die erste Routine zur Darstellung von Checks aus Icinga2 in IPS / braucht kein Mensch im Heimnetz, aber falls der Junior Probleme hat, sehe ich wenigstens woran es liegt .

hier nur der Auszug der Schleife :



foreach ($array["result"] as $key1 => $value1) {

   $VarID=CreateVariableByName ($ParentID,$value1["HOST_NAME"],0);
	if ($value1["SERVICE_CURRENT_STATE"] == 0)
   	{SetValueBoolean($VarID,true);
        }
	else
       {SetValueBoolean($VarID,false);
       }
}

Gruss Thomas

Hi!

Viele Wege führen nach Rom :wink: Aber wie du schon sagtest, die Hauptsache ist > es funktioniert :cool:

Grüße,
Chris