Aloha ;)
Rolfs Schätzung mit den zwei Stunden war ganz gut - ich habe etwa zweieinhalb gebraucht, dafür aber auch gleich die Funktion zum Re-Codieren fertig gemacht.
Ist jetzt nicht so als wär mir langweilig, aber irgendwie hats mich gejuckt.
Das Re-Encodierte Ergebnis:
[datensatz]
version
.minor=2
session
.id=32
datensatz
.name=Muster
.orientierung=1
.uid=0x1
.adresse=0x1
.typ=A
.icon=list
.symbol=2
.xy=8
.xz=4
.max=50
.min=5
.funktion
..nr=0
..typ=100
..wert=1
.funktion
..nr=1
..typ=120
..wert=5
.funktion
..nr=2
..typ=141
.funktion
..nr=3
..typ=142
.funktion
..nr=4
.funktion
..nr=5
datensatz
.name=Beispiel
.uid=0x2005
.adresse=0x5
.typ=B
.sid=0x5
.icon=block
.symbol=5
.xy=6
.xz=5
.max=80
.min=10
.funktion
..nr=0
..typ=1
.funktion
..nr=1
..typ=40
.funktion
..nr=2
..typ=20
..wert=1
.funktion
..nr=3
..typ=18
.funktion
..nr=4
.funktion
..nr=5
..typ=142
datensatz
.name=Test
.orientierung=1
.uid=0x2006
.adresse=0x6
.typ=B
.sid=0x6
.icon=tab
.symbol=3
.xy=15
.xz=15
.max=255
.min=255
.funktion
..nr=0
..typ=1
.funktion
..nr=1
.funktion
..nr=2
..typ=200
.funktion
..nr=3
.funktion
..nr=5
..typ=18
..wert=99
.funktion
..nr=6
..typ=48
Eine Kleinigkeit ist anders - die Leerzeichen vor den Elementen der ersten Hierarchieebene sind jetzt einheitlich vorhanden, das waren sie im Beispiel nicht vollständig, ich vermute das war ein Eingabefehler hier. Ansonsten müsste das deckungsgleich sein.
Das daraus von PHP geparste Array:
Array
(
[datensatz] => Array
(
[version] => Array
(
[minor] => 2
)
[session] => Array
(
[id] => 32
)
[datensatz] => Array
(
[0] => Array
(
[name] => Muster
[orientierung] => 1
[uid] => 0x1
[adresse] => 0x1
[typ] => A
[icon] => list
[symbol] => 2
[xy] => 8
[xz] => 4
[max] => 50
[min] => 5
[funktion] => Array
(
[0] => Array
(
[nr] => 0
[typ] => 100
[wert] => 1
)
[1] => Array
(
[nr] => 1
[typ] => 120
[wert] => 5
)
[2] => Array
(
[nr] => 2
[typ] => 141
)
[3] => Array
(
[nr] => 3
[typ] => 142
)
[4] => Array
(
[nr] => 4
)
[5] => Array
(
[nr] => 5
)
)
)
[1] => Array
(
[name] => Beispiel
[uid] => 0x2005
[adresse] => 0x5
[typ] => B
[sid] => 0x5
[icon] => block
[symbol] => 5
[xy] => 6
[xz] => 5
[max] => 80
[min] => 10
[funktion] => Array
(
[0] => Array
(
[nr] => 0
[typ] => 1
)
[1] => Array
(
[nr] => 1
[typ] => 40
)
[2] => Array
(
[nr] => 2
[typ] => 20
[wert] => 1
)
[3] => Array
(
[nr] => 3
[typ] => 18
)
[4] => Array
(
[nr] => 4
)
[5] => Array
(
[nr] => 5
[typ] => 142
)
)
)
[2] => Array
(
[name] => Test
[orientierung] => 1
[uid] => 0x2006
[adresse] => 0x6
[typ] => B
[sid] => 0x6
[icon] => tab
[symbol] => 3
[xy] => 15
[xz] => 15
[max] => 255
[min] => 255
[funktion] => Array
(
[0] => Array
(
[nr] => 0
[typ] => 1
)
[1] => Array
(
[nr] => 1
)
[2] => Array
(
[nr] => 2
[typ] => 200
)
[3] => Array
(
[nr] => 3
)
[4] => Array
(
[nr] => 5
[typ] => 18
[wert] => 99
)
[5] => Array
(
[nr] => 6
[typ] => 48
)
)
)
)
)
)
...und hier der PHP-Code mit rekursiv aufgerufenen Closures:
// das Posting war zu lang
Vielleicht (hoffentlich?) trägt diese Lösung auch jenseits der Möglichkeit zum Copy+Paste zu Erkenntnissen bei. Falls es Fragen dazu gibt beantworte ich die jedenfalls gerne.
Grüße,
RIDER