ini file multidimensionale arrays
Hallo,
Ik weet dat ik in een ini file sections kan maken, bijvoorbeeld:
[instellingen]
foo = bar
Nu vraag ik me af of ik van foo een array kan maken, en zo ja hoe?
Dus eigenlijk dat je zoiets krijgt als:
Kan dat in een ini file?
Ik weet dat ik in een ini file sections kan maken, bijvoorbeeld:
[instellingen]
foo = bar
Nu vraag ik me af of ik van foo een array kan maken, en zo ja hoe?
Dus eigenlijk dat je zoiets krijgt als:
Kan dat in een ini file?
Wat is het verschil tussen een integer en een string in een ini file?
Juist, niets, het is gewoon tekst.
Dus hoe jij het in een ini wegschrijft maakt niets uit, als je maar weet hoe en hoe je het weer wilt inlezen. Een array kan je dus (natuurlijk) niet definieren in een ini, maar dat is ook totaal de verkeerde vraag.
Als je in je voorbeeld die foo=array gewoon eens weglaat heb je toch wat je wilt? Alle data uit je array staat erin en je kan het er weer uitlezen. Key en waarde.
Juist, niets, het is gewoon tekst.
Dus hoe jij het in een ini wegschrijft maakt niets uit, als je maar weet hoe en hoe je het weer wilt inlezen. Een array kan je dus (natuurlijk) niet definieren in een ini, maar dat is ook totaal de verkeerde vraag.
Als je in je voorbeeld die foo=array gewoon eens weglaat heb je toch wat je wilt? Alle data uit je array staat erin en je kan het er weer uitlezen. Key en waarde.
Ik denk dat je niet begrijpt wat ik bedoel. Ik wil de waardes kunnen foreachen in een loop.
Stel ik heb een aantal bestanden met een naam en een pad, dan wil ik zoiets als dit doen:
[bestanden]
naam = naambestand1
pad = padbestand1
naam = naambestand2
pad = padbestand2
naam = naambestand3
pad = padbestand3
Zoiets dus...
Stel ik heb een aantal bestanden met een naam en een pad, dan wil ik zoiets als dit doen:
[bestanden]
naam = naambestand1
pad = padbestand1
naam = naambestand2
pad = padbestand2
naam = naambestand3
pad = padbestand3
Zoiets dus...
Ik begrijp prima wat je bedoelt, maar ik vraag me af of jij begrijpt dat een ini file gewoon puur tekst is en dat je dus geen variabele types in een ini hebt. wat je in het geheugen hebt maakt daarvoor niet uit en hoe je het wegschrijft/inleest ook niet, het blijft gewoon tekst.
Dus als je een array in het geheugen hebt kan je die uiteraard met een foreach loop wegschrijven en inlezen, maar dat maakt het nog geen array in de ini.
Dus als je een array in het geheugen hebt kan je die uiteraard met een foreach loop wegschrijven en inlezen, maar dat maakt het nog geen array in de ini.
ik zou voor json gaan als je een array wilt gebruiken in een ini file ;P
edit; zou alleen niet weten waarom je een array nodig hebt in een ini..?
edit; zou alleen niet weten waarom je een array nodig hebt in een ini..?
Gewijzigd op 17/02/2012 11:27:30 door Jaron T
Jaron:
Hoe moet ik dit dan doen:
[bestanden]
naam = naambestand1
pad = padbestand1
naam = naambestand2
pad = padbestand2
naam = naambestand3
pad = padbestand3
Het zijn configuratie instellingen die ik er handmatig in wil zetten. In het bovengenoemde voorbeeld zouden naam en pad elkaar telkens overschrijven. Dat werkt dus niet. Dus ik vraag me af of ik een soort subsecties kan maken. Zoiets als dit:
[bestanden]
[1]
naam = bla
pad = bla
[2]
naam = bla
pad = bla
Maar goed, misschien kan ik beter geen ini file gebruiken en dan toch maar een php file?
Hoe moet ik dit dan doen:
[bestanden]
naam = naambestand1
pad = padbestand1
naam = naambestand2
pad = padbestand2
naam = naambestand3
pad = padbestand3
Het zijn configuratie instellingen die ik er handmatig in wil zetten. In het bovengenoemde voorbeeld zouden naam en pad elkaar telkens overschrijven. Dat werkt dus niet. Dus ik vraag me af of ik een soort subsecties kan maken. Zoiets als dit:
[bestanden]
[1]
naam = bla
pad = bla
[2]
naam = bla
pad = bla
Maar goed, misschien kan ik beter geen ini file gebruiken en dan toch maar een php file?
Wat als je nou gewoon een integer laat meelopen en die elke keer achter de naam en pad plakt.... dus
naam1 = ...
pad1 = ...
naam2 = ...
pad2 = ....
etc etc
naam1 = ...
pad1 = ...
naam2 = ...
pad2 = ....
etc etc
Dat zou kunnen, maar stel je even een foreach loop voor
Dan gaat dit niet werken omdat die keys in jouw geval telkens een andere waarde hebben. En ja dan kan ik wel een teller gaan laten meelopen maar dat lijkt me vrij omslachtig.
Code (php)
Dan gaat dit niet werken omdat die keys in jouw geval telkens een andere waarde hebben. En ja dan kan ik wel een teller gaan laten meelopen maar dat lijkt me vrij omslachtig.
Gewijzigd op 17/02/2012 11:38:31 door Ozzie PHP
Waarom zet je dat niet gewoon in een database tabel genaamd "setting"? Daar kan je het key value principe toepassen om het dynamisch te maken.
Ozzie PHP op 17/02/2012 11:38:20:
En ja dan kan ik wel een teller gaan laten meelopen maar dat lijkt me vrij omslachtig.
Dan doe je het lekker niet....
Dit zit nog helemaal vooraan in m'n framework. Ik heb daar nog geeneens een db connection en ik wil dit ook niet in de database. Maar goed... ik ga maar weer terug naar een php file. Thanks anyhow.
Waarom zet je dat niet gewoon in een database tabel genaamd "setting"? Daar kan je het key value principe toepassen om het dynamisch te maken.
Jaron T op 17/02/2012 12:27:22:
Waarom zet je dat niet gewoon in een database tabel genaamd "setting"? Daar kan je het key value principe toepassen om het dynamisch te maken.
Zie mijn voorgaande antwoord :) Dat was voor jou bedoeld.
Erwin H op 17/02/2012 12:05:50:
Dan doe je het lekker niet....
Dussss... waar slaat dat nou weer op??? Dit soort opmerkingen ben ik van jou nou net niet gewend.
Zo:
Zo gaat het in ieder geval in Zend Framework :)
Je zou ook naar YAML kunnen kijken dan is het net zo als in jouw eerste voorbeeld:
Ik ben niet zo bekend met yml maar zo ongeveer..
Code (php)
1
2
3
4
5
2
3
4
5
bestanden.0.naam = 'test'
bestanden.0.pad = /path/
bestanden.1.naam = 'dfgdfg'
bestanden.1.pad = /sdf/dfd/
etc..
bestanden.0.pad = /path/
bestanden.1.naam = 'dfgdfg'
bestanden.1.pad = /sdf/dfd/
etc..
Zo gaat het in ieder geval in Zend Framework :)
Je zou ook naar YAML kunnen kijken dan is het net zo als in jouw eerste voorbeeld:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
bestanden
bestand
naam : 'sfdgd'
pad : '/dfd/fdfd'
bestand
naam : 'gdfg:
pad : '/sdfdf/dfdfd'
bestand
naam : 'sfdgd'
pad : '/dfd/fdfd'
bestand
naam : 'gdfg:
pad : '/sdfdf/dfdfd'
Ik ben niet zo bekend met yml maar zo ongeveer..
Gewijzigd op 17/02/2012 12:58:33 door kees Schepers
Thanks Kees! Is het yaml of yml? Met welke functie parse je dat? Grt. Ozzie
Als je een ini file hebt en deze parsed met parse_ini_file(), dan kan een array gewoon zo: (staat in de functieomschrijving @ php.net)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
[section]
var[] = value1
var[] = value2
Array
(
[section] => Array
(
[0] => value1
[1] => value2
)
)
var[] = value1
var[] = value2
Array
(
[section] => Array
(
[0] => value1
[1] => value2
)
)
Gewijzigd op 17/02/2012 13:16:20 door Jurgen B
Symfony en ZF2 hebben wel yml reader classes, daar kun je wel wat nuttigs uithalen denk ik :) En yml is afkorting van yaml :p
Voor meer informatie:
- Zend_Config_Yaml
- Symfony YAML parser
- Yaml Specs
- andere Zend parsers als ini, json en xml
- Zend_Config_Yaml
- Symfony YAML parser
- Yaml Specs
- andere Zend parsers als ini, json en xml
Ik was te lui om het hele topic door te lezen, maar als je dit gebruikt moet het wel lukken:
schrijven:
Ophalen:
schrijven:
Ophalen:
@Jacco, ik wil de settings handmatig kunnen invullen.
@Jurgen: ja dat wist is... alleen kun je nog steeds telkens maar 1 value toewijzen.
In plaats van dit:
var[] = value1
zou ik graag dit hebben
Maar dat gaat helaas niet :(
Misschien moet ik het toch gewoon een php bestand laten en de variabelen los erin zetten... en dan via get_defined_vars alle variabelen opvragen en in een array stoppen. Geen idee of dat gaat lukken trouwens...
@Jurgen: ja dat wist is... alleen kun je nog steeds telkens maar 1 value toewijzen.
In plaats van dit:
var[] = value1
zou ik graag dit hebben
Maar dat gaat helaas niet :(
Misschien moet ik het toch gewoon een php bestand laten en de variabelen los erin zetten... en dan via get_defined_vars alle variabelen opvragen en in een array stoppen. Geen idee of dat gaat lukken trouwens...
Of je gebruikt gewoon YAML files. Daarin kan het wel.
Tevens kan je in ini dit doen:
Tevens kan je in ini dit doen:




