ERLEDIGT
JA
JA
ANTWORTEN
10
10
ZUGRIFFE
281
281
EMPFEHLEN
-
07.02.09 21:15 #1
- Registriert seit
- Sep 2008
- Beiträge
- 98
Hallo Community,
ich bin gerade eine Funktion zu schreiben, die ein multidimensionales Array runterwandern soll.
Mein Array:
So, nun möchte ich eine 'subcat' auf ein normales array (nicht multidimensional) bringen.PHP-Code:$testarray[] = array( 'name' => 'LOL', 'subcat' => array( 'name' => 'LOL2', 'subcat' => ''));
Also habe ich folgeden Funktion geschrieben:
Und sie wird hier aufgerufen:PHP-Code:function digdown($array) {
if(is_array($array)) {
foreach($array as $key1 => $value1) {
$test[] = array('name' => $value1['name'], 'num' => $value1['num'], 'sub' => 1 );
digdown($value1['subcat']);
}
return $test;
}
}
Es wir aber lediglich der erste Werte eingetragen, also nur eine Rekursion durchgeführt. Dann bleibts stehen. Was mach ich falsch?PHP-Code:$test = digdown($testarray);
Danke!
-
07.02.09 22:04 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Das Problem ist, das du das Rückgabe-Array innerhalb der Funktion überhaupt nicht verwendest. Da müßtest du die 2 Arrays zusammenhängen.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
07.02.09 22:11 #3
- Registriert seit
- Sep 2008
- Beiträge
- 98
So?
PHP-Code:function digdown($array) {
if(is_array($array)) {
foreach($array as $key1 => $value1) {
$test[] = array('name' => $value1['name'], 'num' => $value1['num'], 'sub' => 1 );
$test[] = digdown($value1['subcat']);
}
return $test;
}
}
Dann bekomm ich das hier:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Array ( [0] => Array ( [name] => LOL [num] => [sub] => 1 ) [1] => Array ( [0] => Array ( [name] => L [num] => L [sub] => 1 ) [1] => [2] => Array ( [name] => [num] => [sub] => 1 ) [3] => ) )
Sieht komisch aus :P
Wie müsste ich die Funktion abändern?
-
07.02.09 22:42 #4
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
So wie du es jetzt machst, fügst du ja wieder ein Array als Element in das Array ein. Du müßtest die Arrays aneinanderhängen.
Schau mal hier: http://www.faqts.com/knowledge_base/view.phtml/aid/343
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hi!
So funktioniert es, zumindest bei dem Beispielarray:
GrüßePHP-Code:<?php
$testarray[] = array( 'name' => 'LOL', 'subcat' => array( 'name' => 'LOL2', 'subcat' => ''));
function digdown($array) {
if(is_array($array)) {
foreach($array as $key1 => $value1) {
$test[] = array('name' => $value1['name'], 'num' => $value1['num'], 'sub' => 1 );
if (is_array($value1['subcat'])){
$quark = $value1['subcat'];
$test[] = array('name' => $quark['name'], 'num' => $quark['num'], 'sub' => 2 );
}
}
return $test;
}
}
$test = digdown($testarray);
print_r ($test);
?>
Uwe
-
08.02.09 00:45 #6
- Registriert seit
- Sep 2008
- Beiträge
- 98
Vielen, vielen dank!
Trotzdem,
dass Ding ist ja nicht rekursiv gelöst, sprich es geht zwei Arrays runter und dann ist Schluss.
Mein Testarray hat sich übrigens geändert, wäre nett wenn da jemand mal einen blick drüber werfen könnte:
Wie man sehen kann: Ich will beliebig tief gehen können!PHP-Code:*/ $testarray[] = array( 'bla' => 'bla', 'subcat' => array(array('name' => 'Name9', 'subcat' => '')));
$testarray[] = array( 'name' => 'Nam1', 'subcat' =>
array(
array('name' => 'Nam1', 'subcat' =>
array(
array('name' => 'Nam2', 'subcat' => array()
),
array('name' => 'Nam3', 'subcat' => array())))));
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
Array ( [0] => Array ( [bla] => bla [subcat] => Array ( [0] => Array ( [name] => Name9 [subcat] => ) ) ) [1] => Array ( [name] => Nam1 [subcat] => Array ( [0] => Array ( [name] => Nam1 [subcat] => Array ( [0] => Array ( [name] => Nam2 [subcat] => Array ( ) ) [1] => Array ( [name] => Nam3 [subcat] => Array ( ) ) ) ) ) ) )
Geändert von prinzschleifer (08.02.09 um 01:13 Uhr)
-
Zwar nicht gerade schön, aber funktionell.
Mehr ist beim ersten Kaffee eben noch nicht drinne.PHP-Code:$testarray[] = array(
'name' => 'Nam',
'subcat' => array(
'name' => 'Nam1',
'subcat' => array(
'name' => 'Nam2',
'subcat' => array()
),
),
array(
'name' => 'Nam3',
'subcat' => array()
)
);
function digdown( $array, $list = array() ) {
if( !is_array( $array ) ) return false;
foreach( $array as $k => $value ) {
if ( !is_array( $value ) || empty( $value ) ) continue;
$list[] = array( 'name' => $value['name'], 'num' => $k );
if ( is_array( $value['subcat'] ) ) {
$list = digdown( $value, $list );
}
}
return $list;
}
-
Das rekursiv zu lösen ginge ganz einfach, indem du den Ausgabewert als zweites Argument referentiell mitgibst und das Ursprungsarray selbstverständlich rekursiv aufbaust. Die Funktion soll dazu nur einen Return Wert haben, wenn sie kein zweites Argument hat, also muss dieses nur noch optional sein und fertig is der Schuh:
So oder so ähnlich. Vor dem ersten Kaffee ist mehr nicht drin. Hoffe der Sinn ist klar geworden. Vorher noch auf Fehler prüfen, hab gerade nichts zum Parsen. Und ich blick noch nich ganz bei deinem Testarray durch, vor allem weil dazu die gewünschte Ausgabe fehlt. Sonst wär es garkein Problem das sauber umzusetzen.PHP-Code:function array_flat($arr, &$return = NULL)
{
foreach ($arr as $val)
{
if ($val["name"])
{
$return[] = array(
"name" => $val["name"]
);
}
if(is_array($val["subcat"]))
{
array_flat($val, $return);
}
}
if (!$return)
{
return $return;
}
}
Noch zwe eventuell hilfreiche Funktionen:
http://de.php.net/manual/de/function.array-reduce.php
http://de.php.net/manual/de/function.array-map.phpGeändert von ZodiacXP (08.02.09 um 13:05 Uhr)
Gebe keine Hilfe per PN, Mail, Instant Messenger etc.
und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!
MfG, Zod
__________________
rpd Framework: Rapid Web-Engineering in PHP (Manual | Google Code)
-
08.02.09 16:58 #9
- Registriert seit
- Sep 2008
- Beiträge
- 98
Hi,
ich hatte leider noch keine Zeit an dem Algorithmus weiterzuarbeiten, aber ich kann euch ja mal das Zielarray geben, dann wird die Sache doch recht einfach.
Ursprungsarray:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
Array ( [0] => Array ( [name] => bla [subcat] => Array ( [0] => Array ( [name] => Name9 [subcat] => ) ) ) [1] => Array ( [name] => Nam1 [subcat] => Array ( [0] => Array ( [name] => Nam1 [subcat] => Array ( [0] => Array ( [name] => Nam2 [subcat] => Array ( ) ) [1] => Array ( [name] => Nam3 [subcat] => Array ( ) ) ) ) ) ) )
Zielarray
Code :1 2 3 4 5 6 7 8 9
Array ( [0] => bla [1] => Nam9 [2] => Nam1 [3] => Nam1 [4] => Nam2 [5] => Nam3 )
Das Skript soll einfach den Namen jeder Subkategorie finden und in ein Array packen.Geändert von prinzschleifer (08.02.09 um 17:41 Uhr)
-
Moin,
Willst du jetzt Hilfe oder etwas erledigt haben?
Es wurden mehrere Lösungsvorschläge gepostet, wenn es dich zuviel Zeit kostet(und du nichtmal den Anstand besitzt) dir diese anzusehen, dann wende dich mit deinem Problem vielleicht besser an die Jobbörse
-
08.02.09 19:07 #11
- Registriert seit
- Sep 2008
- Beiträge
- 98
Danke hat geklappt!
Ähnliche Themen
-
Problem bei Rekursion
Von DarkPhoenixX im Forum JavaAntworten: 6Letzter Beitrag: 07.02.08, 07:44 -
Problem mit der Rekursion!
Von safin23 im Forum JavaAntworten: 0Letzter Beitrag: 02.12.07, 15:44 -
Problem mit Rekursion
Von splat im Forum PHPAntworten: 5Letzter Beitrag: 21.01.07, 02:25 -
Dickes Problem mit Rekursion
Von chickenwings im Forum PHPAntworten: 4Letzter Beitrag: 20.07.06, 16:12 -
Problem mit Rekursion und FindNextFile
Von Tutankhseth im Forum VisualStudio & MFCAntworten: 2Letzter Beitrag: 18.08.04, 21:26





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren