Auf Array-Wert zugreifen

Monti

Mitglied
Hallo Com,

ich habe folgendes Problem:
Ich möchte auf einzelne Werte eines mehrdimensionalen Arrays zugreifen.
Leider weiß ich vorher aber nie, in die wievielste Dimension, kann also nicht direkt per
PHP:
$array['a']['b']['c']
darauf zugreifen.
Ich habe aber die jeweiligen Schlüssel in einem Array, also:
PHP:
array(
  'a',
  'b',
  'c'
);

Wie baue ich mir jetzt daraus die korrekte Form, um die Variable anzusprechen?

Ich hatte es schon mit $$ probiert, also:
PHP:
$keys = "array['a']['b']['c']";
echo $$keys;
Leider gibt das eine leere Ausgabe. Wenn die Variable ein String ist, gehts ohne Probleme.
Mittlerweile weiß ich nicht mehr weiter.
Irgendwelche Vorschläge?
Oder sehe ich den Wald vor lauter Bäumen nicht?


Also nochmal kurz zum Verständnis:
Ich will auf einen bestimmten Wert eines Arrays zugreifen, und bekomme die Schlüssel dafür ebenfalls per Array.
Jetzt muss ich mir aus dem Schlüssel-Array irgendwie die Funktion basteln, dass ich am Ende den korrekten Wert des ersten Arrays erhalte.

Danke schonmal im Voraus. ;)


P.S.: Bestimmt ginge das irgendwie über eval(), aber das möchte ich um jeden Preis vermeiden. ;)
 
Zuletzt bearbeitet:
Hallo,

die Antwort findest du hier Beispiel #3.

Das Äquivalent für Javascript könnte so aussehen.

PHP:
if( ! Array.prototype.in_array) {
    Array.prototype.in_array = function(needle) {
        for(var i=0; i < this.length; i++)
            if(this[ i] == needle) return this[ i];//der gesuchte Wert
            else if (this[ i].in_array) {//eigene Funktion rekursiv aufrufen
                if (this[ i].in_array(needle)) return true; 
            }
            return false;
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Ich verstehe nicht, wie mir das weiterhelfen soll...
Ich will ja nicht nur prüfen, ob die Schlüssel existieren, sondern auch deren Werte auslesen.

Ich hab ealso bspw. folgendes stark vereinfachtes Array:
PHP:
$array = array(
  'a' => array(
    'a1' => 'Ich bin a1',
    'a2' => 'Ich bin a2'
  ),
  'b' => array(
    'b1' => 'Ich bin b1',
    'b2' => 'Ich bin b2'
  ),
  'c' => 'Ich habe nur diese eine Diemsnion'
);

Jetzt will ich durch eine Funktion, der die nötigen Schlüssel in einem Array übergeben werden, den Wert ausgeben lassen:
PHP:
function arrayValue(array $keys) {
  global $array;

  return ********************; // Was soll hier hin?
}
Ziel soll es sein, dass das an die Funktion übergebene Array
PHP:
array('a', 'a2')
"Ich bin a2" zurückliefert.
In der Praxis sind es aber teilweise 5 und mehr Dimensionen. Die genaue Anzahl kenne ich aber vorher nicht. Ich könnte zwar per
PHP:
if (count($keys) == 1) {
  return $array[$keys[0]];
}
elseif (count($keys) == 2) {
  return $array[$keys[0]][$keys[1]];
}
...
jeden Fall abdecken, aber ich hatte gehofft, dass es eine einfachere Möglichkeit gibt, bei der die Anzahl der übergebenen Schlüssel keine Rolle mehr spielt...


Lasst mal so Sachen wie "global" außer acht. Das dient nur der Veranschaulichung. ;)
 
Ist das wirklich so schwer? Wenn du bei den Link 10 Zeilen weiter drunter geschaut hättest, dann würdest du diese Funktion finden array_search. Dein Problem ist, du musst einfach ein Funktion bauen die sich rekursiv aufruft.
 
Dafür müsste ich doch aber die Werte kennen. Ich kenne aber nur die Schlüssel.
An eine rekursive Funktion habe ich auch schon gedacht, aber ich will teilweise Werte auch verändern. Das geht aber nicht mit einer rekursiven Funktion, weil ich bei dieser ja immer eine Variable übergebe, die dem aktuellen Stand der Dimension entspricht. Ich bräuchte ja aber Zugriff auf die Originalvariable:
PHP:
$array['a']['a2'] = 'Ich will jetzt nicht mehr a2 sein';
 
Zurück