Rekursives löschen

Hallo zusammen

Ich habe eine Baumstruktur mit viele Kategorien und Unterkategorien. Darin sind auch viele Variablen angelegt. Jetzt möchte ich rekursiv alle Variablen und Kategorien löschen (so wie es in der Verwaltunskonsole geht). Habe mir dazu eine function geschrieben. Leider funktioniert das nicht so gut, da ich keine Kategorien löschen kann die noch Unterkategorien enthalten. Hat dazu jemand eine Idee wie ich diese auf einmal löschen kann?


// löscht Kategorien und Variablen unter der ParentID
// 0 = Variablen löschen
// 1 = Kategorien löschen
function deleteObjectsUnderParentID($ParentID, $delType)
{
	foreach (GetObjectList($ParentID) as $ObjectID)
	{
		$GetvarType = IPS_GetObject($ObjectID);
		if ($delType == 0) //lösche Variablen
		{
      	if ($GetvarType['ObjectType'] > 0)
      	{
      	   IPS_DeleteVariable($ObjectID);
      	}
		} else if ($delType == 1) //lösche Kategorien
		{
	   	if ($GetvarType['ObjectType'] == 0)
	   	{
				IPS_DeleteCategory($ObjectID);
			}
		}
	}
}


Habe schon selbst eine Lösung gefunden, einfach das Array umdrehen.


// Liefert alle child ObjectIDs eines parents rekursiv
function GetObjectList($parent) {
    $ids = IPS_GetChildrenIDs($parent);
    foreach($ids as $id)
    {
        $ids = array_merge($ids, GetObjectList($id));
    }
    return $ids;
}


// löscht Kategorien und Variablen unter der ParentID
// 0 = Kategorien löschen
// 1 = Instanzen löschen
// 2 = Variablen löschen
function deleteObjectsUnderParentID($ParentID, $delType)
{
	$IDsArray = GetObjectList($ParentID);
	$IDsArrayReverse = array_reverse($IDsArray); //Array umdrehen
	foreach ($IDsArrayReverse as $ObjectID)
	{
		$GetvarType = IPS_GetObject($ObjectID);
		if ($delType == 0) //lösche Kategorien
		{
      	if ($GetvarType['ObjectType'] == 0)
      	{
				IPS_DeleteCategory($ObjectID);
      	}
		} else if ($delType == 1) //lösche Instanzen
		{
	   	if ($GetvarType['ObjectType'] == 1)
	   	{
				IPS_DeleteInstance($ObjectID);
			}
		} else if ($delType == 2) //lösche Variablen
		{
	   	if ($GetvarType['ObjectType'] == 2)
	   	{
      	   IPS_DeleteVariable($ObjectID);
			}
		}
	}
}