Arraydimensionen über String "ansprechen"

fanste

Erfahrenes Mitglied
Hi,

Der Titel ist blöd, aber mir ist nichts besseres eingefallen.
Mein Probelm ist folgendes. Ich habe einen String
dim1.dim2.dim3

Den splitte ich nun anhand des Punktes in einzelne Teile. Die 3 Teile/Bezechnungen, die ich dadurch erhalte, entsprechen den Keys eines Mehrdimensionalen Arrays.

Gibt es nun eine Möglichkeit die mit diesen keys in die letzte Arraydimension zu gelangen ohne dass ich eval verwenden muss?

Mr fällt nämlich nur eine Möglichkeit mit einer foreach-Schleife + eval ein. Aber vielleicht geht das ja auch eleganter.

Ich hoffe, dass es verständlich erklärt ist. Danke schonmal.
 
Mein erster Gedanke geht in Richtung einer rekursiven Funktion der 2 (bzw. 3) Werte uebergeben werden.
Dein Array nenne ich hier mal $mein_array.

Beispiel:
PHP:
function getvalue($value_array,$key_array,$key=0)
{
 if (isset($key_array[($key+1)]))
 {
  return getvalue($value_array[$key],$key_array,$key+1);
 }
 else
 {
  return $value_array[$key];
 }
}

$text='dim1.dim2.dim3';
$keys=explode('.',$text);
echo getvalue($mein_array,$keys);

Das sollte theoretisch klappen wenn sich meine Gedanken nicht grad irgendwo verheddert haben sollten.
 
Probier mal Folgendes:
PHP:
<?php

	function return_varExport( $var )
	{
		return var_export($var, true);
	}
	
	$string = 'dim1.dim2.dim3';
	eval('$foo = $bar['.implode('][', array_map('return_varExport', explode('.', $string))).'];');

?>
 
Wenn ich dann beim letzten key angekommen bin, und ich diesem Key dann Werte zuweisen will, müsste ich die Funktion nur so umschreiben, oder?
PHP:
function getvalue($value_array,$key_array,$values, $key=0)
{
 if (isset($key_array[($key+1)]))
 {
  return getvalue($value_array[$key],$key_array,$values, $key+1);
 }
 else
 {
  return $value_array[$key] = $values;
 }
}

$text='dim1.dim2.dim3';
$keys=explode('.',$text);
$values = array(/*MIT INHALT*/);
print_r(getvalue($mein_array,$keys,$values));

EDIT:
Danke an euch beide. Klappt wunderbar.
 
Zuletzt bearbeitet:
Der 3. Wert der Funktion ist lediglich ein Zaehler fuer das Key-Array, also um anzugeben welcher Wert darin angesprochen werden soll.
Zurueckgeliefert wird dann der Wert der in der letzten ueber das Key-Array erreichbaren Dimension steht.
 
Zurück