NeunMalKlug: Mehrdimensionale assoziative array_keys?

Hallo,

schon im Vorhinein vielen Dank für Hinweise.

...zur Lage der Nation:

**** KURZZUSAMMENFASSUNG ****

Wie kann ich die NICHT(!)-numerischen Array_Keys eines mehrdimensionalen Arrays auslesen lassen? Im Sinne von:

$Feld["ichBinDasOberfeld"]["ichBinDasUnterfeld"] = "irgendeinWert";

// [PHP-CODE]

echo "ichBinDasOberfeld";
echo "ichBinDasUnterfeld";

Dabei kenne ich im Programm die Namen BEIDER Keys NICHT! und kann daher nicht direkt darauf verweisen.

--- Und für alle Masochisten:

**** DOKUMENTATION MEINER BISHERIGEN IRRWEGE ****

$Feld["ichBinDasOberfeld"]["ichBinDasUnterfeld"] = "irgendeinWert";

erzeugt laut print_r($Feld) Ausgabe:
Array ( [ichBinDasOberfeld] => Array ( [ichBinDasUnterfeld] => irgendeinWert ) )

Nun speichere ich die Array Keys in einer Variable à la...
$Schluessel = array_keys($Feld);

Die Schleife...

foreach ($Schluessel as $ersterWert) {
echo $ersterWert;
}

...gibt folgerichtig der Wert von ["ichBinDasOberfeld"] aus, nur - wir kann ich ["ichBinDasUnterfeld"] auslesen?
Müsste nicht der Wert von ["ichBinDasUnterfeld"] in in der Variable $ersterWert gespeichert werden?

foreach ($Schluessel as $ersterWert) {
	$Unterschluessel = array_keys($ersterWert);
	foreach ($Unterschluessel as $zweiterWert) {
		echo $zweiterWert;
	}
}

...produziert die folgerichtige Ausgabe "array_keys() expects parameter 1 to be array, string given...".
Dies ist natürlich logisch und nachvollziehbar, da ich mit $Schluessel as $ersterWert eine String-Umwandlung vorgenommen habe.

Doch auch...

$feldKeys = array_keys($Feld);
for ($i=0;$i<count($feldKeys);$i++) {
	$Schluessel = array_keys($feldKeys[$i]);
	echo $Schluessel;

...funktioniert nicht, zwar zeigt jetzt $feldKeys[0] direkt auf [ichBinDasUnterfeld], dennoch ist ja $feldKeys kein array mehr, sondern ein String...
...erm... Hilfe?

  1. Lieber NeunMalKlug,

    kennst Du schon die For-Schleife mit $schluessel => $wert?

    foreach ($ar as $key => $value) {
        $ar[$key] = $value; // ändert nix
    }
    

    Wenn jetzt $value selber ein Array ist, geht das so:

    foreach ($ar as $key => $_ar) {
    
        foreach ($_ar as $k => $v) {
            $ar[$key][$k] = $v; // ändert nix
        }
    }
    

    Eine Übersicht der Schlüssel liefert array_keys:

    $ar_keys = array_keys($ar);
    
    foreach ($ar_keys as $key) {
    
        $_ar_keys = array_keys($ar[$key]);
    
        foreach ($_ar_keys as $k) {
            $ar[$key][$k] = 'neuer Wert';
        }
    }
    

    Liebe Grüße,

    Felix Riesterer.

  2. Tach!

    Die Sachen, die du schon selbst richtig erkannt hast, kommentiere ich nicht weiter. Hier meine Anmerkungen zum Rest:

    Nun speichere ich die Array Keys in einer Variable à la... $Schluessel = array_keys($Feld);

    Kann man machen, ist aber überflüssig, weil du direkt das Array mit foreach durchlaufen kannst. Das hat dazu eine erweiterte Syntax: foreach ($array as $key => $value)

    Die Schleife...

    foreach ($Schluessel as $ersterWert) { echo $ersterWert; }

    ...gibt folgerichtig der Wert von ["ichBinDasOberfeld"] aus, nur - wir kann ich ["ichBinDasUnterfeld"] auslesen?

    $Feld["ichBinDasOberfeld"] ist ein Array, dessen "Unterfeldnamen" du haben möchtest. Mit dem direkten foreach hättest du dieses Array in $value stehen und könntest durch dieses analog laufen.

    Mit deinem Ansatz kann das Array über $Feld[$ersterWert] angesprochen werden.

    Doch auch...

    $feldKeys = array_keys($Feld); for ($i=0;$i<count($feldKeys);$i++) { $Schluessel = array_keys($feldKeys[$i]); echo $Schluessel;

    ...funktioniert nicht, zwar zeigt jetzt $feldKeys[0] direkt auf [ichBinDasUnterfeld], dennoch ist ja $feldKeys kein array mehr, sondern ein String...

    Richtig, das Array ist immer noch $Feld. Wie nachfolgend könnte es gehen (aber direktes foreach geht einfacher):

    $Schluessel = array_keys($Feld[$i]);
    print_r($Schluessel);
    

    dedlfix.

  3. Vielen Dank. Schön, dass es das Forum und euch gibt, allen hier noch ein frohes Fest!