Das sieht ziemlich gut aus! :-)
ich hab jetzt mal versucht, das so einigermaßen umzusetzen, aber es klappt noch nicht so ganz.
Zwar gibt das Script korrekt aus, dass Amerika, Nordamerika, Europa und Nicht-EU active=1 werden soll, aber das Array selbst ändert sich nicht.
Hier mal mein kompletter Code nochmal zum Testen.
Kannst Du mir sagen, was daran noch falsch ist?
<pre>
<?php
$laender=array(
array("name"=>"Amerika", "active"=>0,
"children"=>array(
array("name"=>"Nordamerika", "active"=>0,
"children"=>array(
array("name"=>"USA", "active"=>1),
array("name"=>"Kanada", "active"=>0))
),
array("name"=>"Südamerika", "active"=>0,
"children"=>array(
array("name"=>"Chile", "active"=>0),
array("name"=>"Argentinien", "active"=>0)
)
)
)
),
array("name"=>"Europa", "active"=>0,
"children"=>array(
array("name"=>"EU", "active"=>0,
"children"=>array(
array("name"=>"Deutschland", "active"=>0),
array("name"=>"Österreich", "active"=>0)
)
),
array("name"=>"Nicht-EU", "active"=>0,
"children"=>array(
array("name"=>"Schweiz", "active"=>1)
)
)
)
)
);
//print_r($laender);
make_active_return_active($laender);
function make_active_return_active (&$input) {
if(is_array($input['children'])){
foreach($input['children'] as $child){
$test=make_active_return_active($child);
if($test==1){
echo $input['name']." ".$test."\n";
$input['active'] = 1;
}
}
return $input['active'];
}
elseif($input['active']){
return $input['active'];
}
elseif($input[0]['name']){
foreach($input as $child){
make_active_return_active($child);
}
}
}
print_r($laender);
?>
</pre>