Multi Array key

Hallo,

Ich habe ein kleines Problemchen mit multiArrays. Ich möchte als Ergebnis haben z.B.:
key = 2001
keyA = 10
dataA = 200110

Leider wird das Jahr (2000, 2001, 2002) in der Schleife per key() nur immer als 2000 ausgegeben. Warum und wie kann ich die Daten so ausgeben wie ich es möchte?

function test() {

   $array[2000][10] = 200010;
   $array[2000][11] = 200011;
   $array[2000][12] = 200012;
   $array[2001][10] = 200110;
   $array[2001][11] = 200111;
   $array[2002][10] = 200210;
   $array[2002][11] = 200211;          
                
foreach ($array as $arrayA) {
  foreach ($arrayA as $keyA => $dataA) {
     echo ('<br />key = '.key($array));
     echo ('<br />keyA = '.$keyA);
     echo ('<br />dataA = '.$dataA);          
     echo ('<br />-----');
  }
}
}

Hallo,

bei multidimensionalen Arrays musst du eine Schleife pro Ebene verwenden.

In der ersten Ebene sind nur die Jahreszahlen, deshalb gibt er auch nur die aus.

In der ersten Schleife musst du jedes Objekt als Array behandeln und in einer zweiten Schleife entsprechend die weiteren Schlüssel (Monat) ausgeben.

Gruß,
Steve

1 Like

Hallo,
ich suche mir jetzt erst die $keys (Jahre) des array und benutze diese in den Schleifen. Keine Ahnung ob das der beste Weg ist aber es funktioniert erstmal.

$array[2000][10] = 200010;
$array[2000][11] = 200011;
$array[2000][12] = 200012;
$array[2001][10] = 200110;
$array[2001][11] = 200111;
$array[2002][10] = 200210;
$array[2002][11] = 200211;

$keys = array_keys($array);   
for($i = 0; $i < count($keys); $i++) {
  foreach ($array[$keys[$i]] as $keyA => $dataA) {
     echo ('<br />$keys[$i] = '.$keys[$i]);
     echo ('<br />$keyA = '.$keyA);
     echo ('<br />$dataA = '.$dataA);          
     echo ('<br />-----');
  }         
}

ja klar. Du bist durch deine subobtimale Variablennamen durcheinandergekommen und versuchts Keys zu holen, die es nicht mehr gibt. So isses besser:

foreach ($array as $firstLevelKey => $firstLevelValue) {
  foreach ($firstLevelValue as $secondLevelKey =>  $secondLevelData) {
     echo ('<br />key = '.$firstLevelKey);
     echo ('<br />keyA = '.$secondLevelKey);
     echo ('<br />dataA = '.secondLevelData);          
     echo ('<br />-----');
  }

Das kann man natürlich so machen, ist aber performanceseitig die schlechtere Wahl, außerdem läuft man bei Schleifen mit for immer Gefahr, dass man sich vertut und auf Elemente zugreift, die es gar nicht mehr gibt. Da ist forEach gutmütiger.

Mein Tipp (wie immer übrigens): benenne deine Variablen vernünftig, dann blickst du besser durch.

und noch ein Tipp: kennst du print_r()?

Und diese dann zuerst prüft, ob sie überhaupt existieren …

Man kann in PHP ohne print_r entwickeln?

klar, das kann man so machen. Oder man nimmt halt gleich foreach und muss sich eben nicht darum kümmern. Wenn man gleich so programmiert, dass nichts passieren kann, ist man auf jeden Fall auf der sichereren Seite als wenn man laufend an irgendwelche Prüfungen denken muss, die - wenn es wirklich darauf ankommt - mit Sicherheit vergessen werden.

Das was Paul gezeigt hat sieht für mich aus, als würde er genau das versuchen.

Der Code im Beispiel war nur ein Beispiel :wink:

Und bei for($i = 0; $i < count($keys); $i++) kann eigentlich nichts schief gehen weil man ja den count aus dem array holt den man durchsucht. Aber ich versuche die foreach auch mal bezüglich Performance. Danke

Gruß

Hahaha!!! Ich lach mich kaputt. Wieviele Leute haben mit so einer überheblichen Annahme ihre Anwendung gekillt? Das geht so schnell.

for($i = 1; $i <=count($keys); $i++) 
{
	if($i=12)
	{
		for($i = 0; $i < count($otherKeys); $i++) 
		{
			//do stuff
		}
	}
}

Finde den Fehler!

@Paul immernoch nicht gefunden?

Ich sehe mindestens zwei Fehler, welcher von dir beabsichtigt ist, kann ich nicht entscheiden. Magst du deine Aufgabe lösen?

dann such mal noch ein bisschen.

Nö. Ich will, dass @Paul versteht, dass es sehr wohl leicht ist, Fehler in einer for-Schleife zu machen, die man bei foreach einfach nicht machen kann. Deswegen löse ich jetzt nicht.

Aber allein, dass du nicht auf den ersten Blick alles gefunden hast unterstreicht mein Argument. Man überschätzt seine eigenen Fähigkeiten zu leicht und unterschätzt den Fehlerteufel.

Wenn du zwei Tools hast und beide machen das gleiche aber bei dem einen ist es gefährlich, einen Fehler zu machen, dann gibt es 2 Arten von Menschen:

  1. Ich mag die Farbe vom gefährlichen Tool lieber, dafür bin ich bestimmt immer ganz vorsichtig.
  2. Safety first.

Und genauso muss man auch programmieren. Wenn du beim Programmieren gleich die richtigen Tools anwendest, bist du gleich viel sicherer - auch vor deinen eigenen Fehlern.

Dieses Thema wurde automatisch 30 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Nachrichten mehr erlaubt.