TS: mehrdimensionales Array durchsuchen

Beitrag lesen

Hello,

Allerdings sollte hier Postels Gesetz gelten: „Sei streng bei dem, was du tust, und offen bei dem, was du von anderen akzeptierst.“

Das ist auch die verwissenschaftlichte Antwort auf deine Frage, warum man in PHP Arraybezeichner/-Zeiger immer mit dem leeren Arraytyp ($_arr = array()) initialisieren sollte.

Es ist eine Sache, ob man einer uninitialisierte Variablen einfach eine Arrayzuweisung aufdrückt, also sowas wie

$schlumpf = null;
$schlumpf[2] = "Gargamel";

PHP lässt das idiotischerweise zu und derjenige, der so programmiert, gehört blau angemalt. Wenn in $schlumpf etwas anderes drinsteht, vor allem ein Skalarwert, dann macht's bum.

Es ist eine andere Sache, sowas hier zu tun - vorausgesetzt, $_record wird nach der Schleife nicht mehr verwendet:

$_record = array();
foreach ($_starships as $key => $_record) 
{
   // code code code $_record code code code
}

Diese Initialisierung ist dann und nur dann nötig, wenn $_record nach der Schleife verwendet wird. Sie deckt den Fall ab, dass $_starships leer ist und der foreach kein einziges Mal betreten wird. In dem Fall sollte man aber auch $key initialisieren. Ein hübsches Konstrukt wie foreachelse, dass bspw. Smarty kennt, fehlt im nativen PHP. Das wurde zwar schon mindestens drölfmal in verschiedenen Formen als PHP Verbesserungsvorschlag eingebracht, aber von den PHP Sprachbewahrern immer abgelehnt. Ist vermutlich besser so... 😉

Für den Code innerhalb der Schleife ist die Initialisierung irrelevant, weil PHP $key und $_record pro Durchlauf mit Werten aus dem Array befüllt.

Dann hast DU den A-Postel nicht verstanden. Warum sollte man etwas untetlassen, was fast nichts kostet, aber im Zweifelsfalle für erheblich mehr Sicherheit und - vor allem - weniger Denkarbeit bei der Programmierung sorgt?

Warum sollte ich mir genau an dieser Stelle Gedanken für Microoptimierung machen, wenn es doch auf "meine Art" fast nichts kostet?

Außerdem kann man es dem Array-Bezeichner an dieser Stelle nicht ansehen, ob er eine übernommene Referenz oder ein neuer Bezeichner dieser Instanz ist.

Hier hat PHP einfach eine Designeigenschaft, die man berücksichtigen MUSS.

Glück Auf
Tom vom Berg

--
Es gibt soviel Sonne, nutzen wir sie.
www.Solar-Harz.de
S☼nnige Grüße aus dem Oberharz