Nästan...
För att förtydliga lite.. såhär kan samma array som ovan se ut om jag inaktiverat åtkomst till alla typer av händelser:
Array
(
[1] => Array
(
[id] => 1
[parent] => 0
[name] => Startsida
[uri] => 125
[basename] => index.php
[child] =>
)
[red]
[23] => Array
(
[id] => 23
[parent] => 0
[name] => Händelser
[uri] => 0
[basename] =>
[child] => Array
(
[24] => Array
(
[id] => 24
[parent] => 23
[name] => Publika nyheter
[uri] => 0
[basename] =>
[child] =>
)
[25] => Array
(
[id] => 25
[parent] => 23
[name] => Interna nyheter
[uri] => 0
[basename] =>
[child] =>
)
[26] => Array
(
[id] => 26
[parent] => 23
[name] => Kalender
[uri] => 0
[basename] =>
[child] =>
)
)
)
[/red]
)
Kolla det rödmarkerade "stycket", i.o.m. att det saknas både en adress till en ev. sida samt att det saknas "barn" till en sådan, är hela det stycket "onödigt" och måste raderas. Den här funktionen hittade jag på Stackoverflow:
function searchAndDestroy(&$a, $key, $val){
foreach($a as $k => &$v){
if(is_array($v)){
$r = searchAndDestroy($v, $key, $val);
if($r){
unset($a[$k]);
}
}elseif($key == $k && $val == $v){
return true;
}
}
return false;
}
Den kan ta bort en hel "förälder", men endat baserat på en sak, t.ex. om jag skickar med 'basename', '' in till funktionen, så tas rätt saker bort, men fel i mitt fall, eftersom jag måste ta bort allt där basename är '' och 'child' inte är en array, eller där arrayen inte innehåller några "barn".
Kan man tweaka den här funktionen för att göra det jag vill? Har försökt fram och tillbaka med får det inte att fungera. Kanske är det för att tröttheten börjar krypa på..
