Mailinglisten-Archive |
Hi,
On Wed, Jun 22, 2005 at 04:12:58PM +0200, Aron Schlesinger wrote:
> Am 22.06.2005 um 16:07 schrieb Raffael Schmid:
> >
> >> Hat jemand ne idee wie ich das elegant lösen kann?
> >
> >verschachtelte foreach?
> >
>
> Dafür müsstest Du wissen wie viele ebenen das ganze hat.
> Und das soll beliebig sein, wenn ich Michael richtig verstanden habe.
> Das würde ich mir über einen Rekursive[0] Funktion zusammen bauen.
Genau, so in der Art:
--------------------------------Begin Code-----------------------------
# Dummy-Daten
# (sorry, das bekomme ich nicht auf 80 Zeichen Breite formatiert :-)
$struct = array('50'
=> array('id' => '50',
'page_name' => 'index',
'_SUB_PAGE_'
=> array('51'
=> array('id' => '51',
'page_name' => 'admin-website',
'_SUB_PAGE_'
=> array('53'
=> array('id' => '53',
'page_name' => 'pages'
)
),
),
'52'
=> array('id' => '52',
'page_name' => 'admin-projects',
),
)
)
);
# das hier wird dein eindimensionales Array
$simple_struct = array();
$path = '';
# Funktion aufrufen. Da direkt in die Referenz von $simple_struct
# geschrieben wird ohne return-Wert.
get_nodes($struct, $path, $simple_struct);
# Und hier die eigentliche Funktion die sich rekursiv aufruft.
function get_nodes($struct, $path, &$simple_struct){
foreach ($struct as $id => $values) {
$simple_struct[$id]['id'] = $values['id'];
$simple_struct[$id]['id'] = $values['id'];
$simple_struct[$id]['page_name'] = $path . '/' . $values['page_name'];
if (isset($values['_SUB_PAGE_']) && is_array($values['_SUB_PAGE_'])) {
get_nodes($values['_SUB_PAGE_'], $simple_struct[$id]['page_name'], $simple_struct);
}
}
}
print_r($simple_struct);
---------------------------------End Code------------------------------
Gruss Jens
php::bar PHP Wiki - Listenarchive