Tom: Multidimensionale Arrays

Beitrag lesen

Hello,

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

Es müsste auch reichen

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

ist ausprobiert und laut Manual auch logisch...

nein, es ist beides falsch, da nicht berücksichtigt wird, ob das Array evtl. leer ist. Falls dies so ist, liefern sowohl reset() als auch next() boolean false und count(false) liefert 1, was in diesem Fall aber nicht erwünscht sein dürfte.

Gut, dass Du darauf hinweist.
Ich hatte vorhin zufällig gerade einen größern Array-Test auf dem Schirm für mein kleines PHP-Handbuch "Die Grenzen ausreizen"...

Für die hiesige Fragestellung hatte ich allerdings einfach vorausgesetzt, dass man bereits weiß, dass die benutze Variable existiert und ein Array ist. Faulheit rächt sich aber!

Ich empfehle daher, aufgrund Deiner Ermahnung und der Versuche, die ich ja eigentlich garade nochmal wiederholt habe:

Bevor man in PHP mit einem Arrayelement irgendetwas anfängt, sollte man überprüfen,
   ob es überhaupt definiert ist und ob es wirklich ein Array ist.

Anderenfalls gibt es erstaunliche Ergebnisse und leider selten eine Warnung / Notice.
Ich habe es auch schon mehrmals geschafft, durch entsprechende (falsche) Array-Operationen den Apachen (also sein PHP-Modul) zum Absturz zu bringen. Das Ding hat anschließend nur noch Quatsch gemacht.

Besonders gut klappt das durch Zuweisung eines Arrays auf einen im Array gespeicherten Skalar.
Aber auch die implizite Deklaration führt hier manchmal zum "Erfolg"

$_data['Hansen'] = "Hans";
$_data['Piller'] = "Paul";
$_data['Fröhlich'] = "Fritz";
$_data['Lummer'] = "Lieselotte";
$_data['sorglos'] = "Sabine";

$_data['Fröhlich']['Adamski'] = 'Abraham';  ### Fehler! Subelement muss vorhanden sein

Auf jeden Fall kommt dummes Zeug dabei heraus...

Eigentlich sollte das zumindest einen Fehler geben. wahlweise

  • warning: cannot redeklare Index imlicit
  • notice: index not found

oder sonstwas schlaues.

Man bekommt den  Server damit jedenfalls aus dem Tritt und ich befürchte, dass das auch über den Weg $_POST, $_GET, $_COOKIE funktioniert. Soweit bin ich aber noch nicht vorgedrungen.

Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)