Wurmi: Array rekursiv nach oben ändern

Beitrag lesen

Hallo!
Ich steh grad auf dem Schlauch...

Ich möchte eine Funktion schreiben, die wie bei einem Checkbox-Baum die Elternelemente abhängig von dem Wert der einzelnen Elemente ggf. anpasst, also in unten genanntem Beispiel

  • "Nordamerika" active=1 setzt (weil USA active=1),
  • "Amerika" active=1 setzt (weil USA active=1, bzw. dann Nordamerika active=1),
  • "Nicht-EU" active=1 setzt (weil Schweiz active=1),
  • "Europa" active=1 setzt (weil Schweiz active=1, bzw. dann Nicht-EU active=1)

Irgendwie muss das ja mit einer rekursiven Funktion lösbar sein, aber ich komme im Moment nicht drauf wie...

Jemand eine Idee?
Danke!

Andreas

Beispiel:

  
<?php  
$laender=array(  
	array("name"=>"Amerika", "active"=>0,  
        "children"=>array(  
            array("name"=>"Nordamerika", "active"=>0, "children"=>  
                array("name"=>"USA", "active"=>1),  
                array("name"=>"Kanada", "active"=>0)),  
            array("name"=>"Südamerika", "active"=>0, "children"=>  
                array("name"=>"Chile", "active"=>0),  
                array("name"=>"Argentinien", "active"=>0))  
        )  
	),  
	array("name"=>"Europa", "active"=>0,  
        "children"=>array(  
            array("name"=>"EU", "active"=>0,	"children"=>  
                array("name"=>"Deutschland", "active"=>0),  
                array("name"=>"Österreich", "active"=>0)),  
            array("name"=>"Nicht-EU", "active"=>0,	"children"=>  
                array("name"=>"Schweiz", "active"=>1)),  
        )  
	)  
);  
print_r($laender);  
?>  
  
Ausgabe von print_r():  
  
Array  
(  
    [0] => Array  
        (  
            [name] => Amerika  
            [active] => 0  
            [children] => Array  
                (  
                    [0] => Array  
                        (  
                            [name] => Nordamerika  
                            [active] => 0  
                            [children] => Array  
                                (  
                                    [name] => USA  
                                    [active] => 1  
                                )  
  
                            [0] => Array  
                                (  
                                    [name] => Kanada  
                                    [active] => 0  
                                )  
  
                        )  
  
                    [1] => Array  
                        (  
                            [name] => Südamerika  
                            [active] => 0  
                            [children] => Array  
                                (  
                                    [name] => Chile  
                                    [active] => 0  
                                )  
  
                            [0] => Array  
                                (  
                                    [name] => Argentinien  
                                    [active] => 0  
                                )  
  
                        )  
  
                )  
  
        )  
  
    [1] => Array  
        (  
            [name] => Europa  
            [active] => 0  
            [children] => Array  
                (  
                    [0] => Array  
                        (  
                            [name] => EU  
                            [active] => 0  
                            [children] => Array  
                                (  
                                    [name] => Deutschland  
                                    [active] => 0  
                                )  
  
                            [0] => Array  
                                (  
                                    [name] => Österreich  
                                    [active] => 0  
                                )  
  
                        )  
  
                    [1] => Array  
                        (  
                            [name] => Nicht-EU  
                            [active] => 0  
                            [children] => Array  
                                (  
                                    [name] => Schweiz  
                                    [active] => 1  
                                )  
  
                        )  
  
                )  
  
        )  
  
)  
  
Gewünschtes Ergebnis:  
  
<?php  
$laender_neu=array(  
	array("name"=>"Amerika", "active"=>1,  
        "children"=>array(  
            array("name"=>"Nordamerika", "active"=>1, "children"=>  
                array("name"=>"USA", "active"=>1),  
                array("name"=>"Kanada", "active"=>0)),  
            array("name"=>"Südamerika", "active"=>0, "children"=>  
                array("name"=>"Chile", "active"=>0),  
                array("name"=>"Argentinien", "active"=>0))  
        )  
	),  
	array("name"=>"Europa", "active"=>1,  
        "children"=>array(  
            array("name"=>"EU", "active"=>0,	"children"=>  
                array("name"=>"Deutschland", "active"=>0),  
                array("name"=>"Österreich", "active"=>0)),  
            array("name"=>"Nicht-EU", "active"=>1,	"children"=>  
                array("name"=>"Schweiz", "active"=>1)),  
        )  
	)  
);  
?>