Problem mit Array (Rekursion ?)

k3nguruh

Erfahrenes Mitglied
Hallo,

Gegeben sind verschieden lange (multidimensionale) Array's. Davon möchte ich jedesmal den letzten Key und Value haben.
Ich habe nach dem googlen erfahren, dass sowas wohl Rekursion heisst. Leider aber bis jetzt keine Bsp. gefunden, aus denen ich schlau wurde, um eine eigenen Funktion schreiben zu können.

Ich könnte zwar jedesmal mit einer foreach Schleife durchgehen, aber das ist wohl nicht das, was man "ordentlich" nennt.

Ein Bsp. mal zum anschauen:
PHP:
$array1['...']['...']['...']['...']['...']['key1'] = "value1";
$array1['...']['...']['...']['...']['...']['key2'] = "value2";

$array2['...']['key3'] = "value3";
$array2['...']['key4'] = "value4";

Und so sollte das Ergebnis dann aussehen:
PHP:
$array['key1'] = "value1";
$array['key2'] = "value2";
$array['key3'] = "value3";
$array['key4'] = "value4";

Ich hoffe mir kann einer Helfen....
 
Rekursiv bedeutet eine Funktion die sich selber aufruft.

Ungetestet und nach 5 belgischen Bieren zusammengewürfelt
PHP:
$newArray = array();
getLast($array);
var_dump($newArray);

function getLast($array){
	foreach($array as $key => $value){
		if(is_array($value)){
			//ISt noch ein Array. EIne Stufe tiefer gehen
			getLast($value);
		}else{
			//Zum Resultat hinzufügen
			$GLOBALS['newArray'][$key] = $value;
		}
	}
}
 
Yaslaw, aber bitte nicht $GLOBALS['newArray'][$key] = $value; :P

return array() wäre deutlich schöner im Bezug auf Kapselung von Daten.
 
Hallo,
und etwa so würde eine SPL-Lösung aussehen:
PHP:
$array = array($array1, $array2);

$arrIterator = new RecursiveArrayIterator($array);
$itIterator = new RecursiveIteratorIterator($arrIterator); /* Iterator-Mode: LEAVES_ONLY */

foreach ($itIterator as $key => $value) {
	$arrResult[$key] = $value;
}

Ergänzung:
Aber aufpassen: Wenn die ursprünglichen Arrays so aussehen
Code:
$array1['...']['...']['...']['...']['key1'] = "value1";
$array1['...']['...']['...']['...']['key2'] = "value2";
$array2['...']['...']['key1'] = "value3";
$array2['...']['...']['key2'] = "value4";
..., dann werden die Werte "value1" und "value2" überschrieben und das Ergebnis sieht so aus:
Code:
Array
(
    [key1] => value3
    [key2] => value4
)
 
Zuletzt bearbeitet:
Die Lösung von hela finde ich sehr schön (ich muss mich mal in SPL einarbeiten). Aber noch der vollstädigkeitshalber die Lösung mit rekursiver Funktion ohne $GLOBALS
PHP:
$newArray = getLast($array);

function getLast($array){
    //Rückgabearray initialisieren
    $retVal = array();
    foreach($array as $key => $value){
        if(is_array($value)){
            //Ist noch ein Array. Eine Stufe tiefer gehen
            //Resultat der Funktion an den eigenen Rückgabearray anhängen
            $retVal += getLast($value);
        }else{
            //Ist die letzte Stufe
            //Zum Resultat hinzufügen
            $retVal[$key] = $value;
        }
    }
    return $retVal;
}  

print_r($array);
print_r($newArray);
 
Zurück