-
Hallo
Wie kann man einen Array den man einer rekursiven Funktion übergibt wieder ausgeben?
Der Array "$structure" sieht so aus:
Die Funktion die ich mir geschrieben habe sieht so aus:PHP-Code:Array
(
[20] => Array
(
[id] => 20
[name] => Root
[children] => Array
(
[30] => Array
(
[id] => 30
[name] => Primaten
[children] => Array
(
[18] => Array
(
[id] => 18
[name] => Halbaffen
[children] => Array()
)
[42] => Array
(
[id] => 42
[name] => Affen
[children] => Array()
)
)
)
)
)
)
PHP-Code:function rekursiv( $array )
{
foreach( $array as $key => $value )
{
if( is_array($value) )
{
if( count( $value['children'] ) > 0 )
{
rekursiv( $value['children'] );
}
else
{
unset( $value['children'] );
}
}
}
return;
}
rekursiv( $structure );
print_r($structure);
Gedachte hatte ich nun, leere Kinder ("children") zu entfernen und wenn diese nicht leer sind die Funktion noch einmal aufzurufen für die jeweiligen Kinder-Elemente.
Wieso gibt die Funktion $structure unverändert aus? Wo steckt bei dieser rekursiven Funktion der Fehler?
-
Wenn du eine Variable an eine Funktion übergibst, erstellt diese eine Kopie davon.
Die Lösung für dein Problem ist einfach: Nutze eine Referenz.
PHP-Code:function rekursiv( &$array )
{
foreach( $array as $key => $value )
{
if( is_array($value) )
{
if( count( $value['children'] ) > 0 )
{
rekursiv( $value['children'] );
}
else
{
unset( $value['children'] );
}
}
}
return;
}
rekursiv( $structure );
print_r($structure);
KIDS Kinderbetreuungsdienst
Xing
They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety.
Benjamin Franklin
-
Leider kommt aber auch dabei das Array unverändert in dem print_r() raus.
-
Du hast recht...

Habs ein wenig anders gelöst.
PHP-Code:<pre>
<?php
$arr = array('20' => array(
'id' => 20,
'name' => 'Root',
'children' =>
array(
'id' => '30',
'name' => 'Primaten',
'children' => array(
array(
'id' => 18,
'name' => 'Halbaffen',
'children' => array()
),
array(
'id' => 42,
'name' => 'Affen',
'children' => array()
)
)
)
)
);
function rekursiv( $array )
{
foreach( $array as $key => $value )
{
if( is_array($value) )
{
if( count( $value['children'] ) > 0 )
{
rekursiv( $value['children'] );
}
unset( $value['children'] );
}
$arr[] = $value;
}
return $arr;
}
$array = rekursiv( $arr );
print_r($array);
?>KIDS Kinderbetreuungsdienst
Xing
They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety.
Benjamin Franklin
-
In mehreren Foren gleichzeitig dieselbe Frage zu stellen ist eigentlich verpönt. Funktion gibt Array nicht zurück - XHTMLforum
Markus Wulftange
![]() |
PHP 5 / MySQL 5 Seminar (22 Stunden Video-Training) Preis: früher: 39,95€ - jetzt nur: 7,99€ PHP 5 / MySQL 5 Lernkurs – 22 Stunden Video-Training auf DVD Hier geht es zum Angebot Über 1.000 weitere IT-Bücher zum Sonderpreis lieferbar! |
Ähnliche Themen
-
String wird nicht zurückgegeben
Von maxn im Forum PHPAntworten: 6Letzter Beitrag: 25.04.08, 09:31 -
Problem mit rekursiver Funktion
Von visiondpc im Forum PHPAntworten: 4Letzter Beitrag: 09.09.07, 16:09 -
Parameter wird gelöscht bei rekursiver Funktion
Von tantebootsy im Forum Javascript & AjaxAntworten: 6Letzter Beitrag: 19.05.06, 11:32 -
frunction mit array - array wird nicht zurückgegeben
Von measel101 im Forum PHPAntworten: 2Letzter Beitrag: 19.08.02, 16:37 -
Problem mit rekursiver Funktion in ABAP
Von SirNeo im Forum Sonstige SprachenAntworten: 2Letzter Beitrag: 17.01.02, 10:14



Zitieren


Login





Lesezeichen