Mehrdimensionale assoziative array_keys?
NeunMalKlug
- php
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?
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.
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.
Vielen Dank. Schön, dass es das Forum und euch gibt, allen hier noch ein frohes Fest!