Christian Seiler: Multidimensionale Arrays und count / sizeof

Beitrag lesen

Hallo,

Danke für die Antwort, allerdings habe ich leider das Beispiel etwas unpassend gewählt...
Ich habe ein Array in der Session gespeichert und möchte die Größe der tieferen Ebene ermitteln.
sizeof($_SESSION['meinArray'])
Die erste Ebene des Arrays ist assoziativ indexiert, die zweite numerisch.
Ich würde mich über weitere Hilfe freuen.

Das geht so ohne weiteres nicht. Warum? Weil in PHP es eigentlich keine mehrdimensionalen Arrays gibt. Mehrdimensionale Arrays werden in PHP nämlich so realisiert, dort Arrays wieder als Elemente des äußeren Arrays genommen werden. Die können auch andere Größe haben, zum Beispiel:

$array = array (  
  array (1, 2, 3),  
  array (4, 5, 6, 7)  
);

Wenn Du programmiertechnisch sicherstellen kannst, dass die immer die gleiche Größe haben, dann kannst Du folgenden Code verwenden, um die "innere Dimension" zu bestimmen (ansonsten ist "innere Dimension" schlicht nicht definiert):

$schluessel = array_keys ($_SESSION['meinArray']);  
if (!count ($schluessel)) {  
  // $_SESSION['meinArray'] ist in der ersten Ebene leer, also kann  
  // nicht bestimmt werden, wie viele Einträge in der zweiten Ebene  
  // wären...  
  $anzahl = null;  
} else if (!is_array ($_SESSION['meinArray'][$schluessel[0]])) {  
  // Der erste Schluessel von $_SESSION['meinArray'] ist keinem Array  
  // zugeordnet, also gibt's auch keine Anzahl Elemente...  
  $anzahl = null;  
} else {  
  $anzahl = count ($_SESSION['meinArray'][$schluessel[0]]);  
}

Alternativ kannst Du auch sowas wie

$anzahl = count (first ($_SESSION['meinArray']));

machen, das ist kürzer, allerdings stellt das den internen Positionszeiger von $_SESSION['meinArray'] um (was OK ist, wenn Du weißt, was das heißt, siehe halt die Doku zu first(), next(), key(), reset(), etc.) und hat keine Überprüfungen drin (was OK ist, wenn Du programmiertechnisch sicherstellst, dass der Array immer gültig und die richtige Form hat).

Viele Grüße,
Christian