parse_ini_file und Schlüsselwerte: test[123] = "Test"

Chance

Member
Sind diese Schlüsselwerte in einer ini Datei, die durch PHP geparst wird möglich ?

Ein Kollege sagt, es gibt nur die Möglichkeit von test[] . = "test" .
Aber ich habe ausprobiert, ob es mit test[123] = "test" auch geht. Funktioniert.

Diese Funktion, die funktioniert, sollte nicht funktionieren.
Wer hat Recht ?
 

rellek

relativ sensationell
Teammitglied
Der Kollege hat dahingehend recht, dass man test[] nutzen sollte, weil dann keine Werte ungewollt überschrieben werden.

Dass aber auch ein test[123] funktioniert, liegt daran, dass PHP beim INI-Parsen (im Übrigen ja auch beim Verarbeiten von GPC-Daten, vgl. Such- und Anhangsfunktion) die Variablen wie von PHP gewohnt behandelt. Im "wahren Leben" ist es ja auch so, dass bei $array[] der nächste freie Index gemeint wird und bei $array[123] der 123. Index (egal ob er schon existiert oder nicht und ob es die ersten 122 schon gibt).

Allerdings gibt es bei test[] nicht die Gefahr, dass Daten ungewollt überschrieben werden. Dafür können sich die Indizes ändern. Muss man halt sehen, was schlimmer ist. Generell würde ich aber test[] (und im Zweifel dann in_array()) bevorzugen.
 

Chance

Member
Kann das passieren, das beim Parsen ungewollt Indizies überschrieben werden ?
Ich vergebe Werte nur Strict... d.h. da Sie da stehen wo Sie hingehören.

Dumme Frage, ich weiss....
 

rellek

relativ sensationell
Teammitglied
Das kommt stark drauf an, wo die INI-Datei herkommt. Wenn du die zum Teil aus einem Array generierst und einige vermeindlich konstante Sachen fix reinbastelst, dann kann dir folgendes Szenario passieren:
Code:
; alle "dynamischen"
test[] = 1
test[] = 2
test[] = 3
test[] = 4

; und nun die konstanten, die immer da sein müssen
test[3] = 15

Huch? Dann wurde die 4 überschrieben.

Aber mal eine andere Frage. Hat das einen bestimmten Grund, dass du unbedingt INI-Dateien nutzen willst? Warum speicherst du dein Einstellungen-Array nicht serialisiert (serialize()/unserialize())? Damit bleibt dein Array genau so bestehen, wie du es erzeugt hast.
 

Chance

Member
Mein Kollege (und vorher schon laaaange Ich) nutzen die INI Datei, um Formulare automatisch zu erzeugen.

Speziell bei ihm geht es um die Werte in Radio, Select und Checkboxfeldern.
 

Chance

Member
Also sollte man test[123] = "test" nur deshalb nicht benutzen, weil es indizies überschreiben könnte ?
 

rellek

relativ sensationell
Teammitglied
Diese Gefahr besteht prinzipiell nur dann, wenn man entweder nicht aufpasst (und denselben Index einfach 2x in die INI schreibt) oder wenn [] und [n] mischt.

Mir ist grad noch was eingefallen, was keinem Kollegen sauer aufstossen könnte bei dem Gedanken an test[123]. Nämlich wärs denkbar, dass PHP, weil es ja die 122 vorher nicht gibt, als assoziatives Array behandelt, während mit test[] ein klassisches Zähl-Array entsteht. Beim Zugriff auf die Elemente ist das aber kein Unterschied. Nur dass so ein assoziatives Array ein klein wenig mehr Speicher braucht, aber so wirklich interessiert das heutzutage wohl auch nicht (vor allem reden wir nicht von dramatischen Unterschieden).
 

Chance

Member
Ich hole nur mehere Meinungen ein ^^ .
Dein Antwort ist bis jetzt die Beste...

Aber mein Kollege ist etwas... schwierig.
 
Oben