ini file multidimensionale arrays

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

17/02/2012 10:46:19
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
foo = array
      key1 = waarde 1
      key2 = waarde 2
      key3 = waarde 3


Kan dat in een ini file?
 
PHP hulp

PHP hulp

28/03/2024 23:29:34
 
Erwin H

Erwin H

17/02/2012 10:57:39
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

17/02/2012 11:05:45
Quote Anchor link
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...
 
Erwin H

Erwin H

17/02/2012 11:21:30
Quote Anchor link
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.
 
Jaron T

Jaron T

17/02/2012 11:27:10
Quote Anchor link
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..?
Gewijzigd op 17/02/2012 11:27:30 door Jaron T
 
Ozzie PHP

Ozzie PHP

17/02/2012 11:31:04
Quote Anchor link
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?
 
Erwin H

Erwin H

17/02/2012 11:34:04
Quote Anchor link
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
 
Ozzie PHP

Ozzie PHP

17/02/2012 11:38:20
Quote Anchor link
Dat zou kunnen, maar stel je even een foreach loop voor

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
foreach($ini_settings as $setting) {
  echo $setting['naam'];
  echo $setting['pad'];
}

?>


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
 
Jaron T

Jaron T

17/02/2012 12:03:08
Quote Anchor link
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.
 
Erwin H

Erwin H

17/02/2012 12:05:50
Quote Anchor link
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....
 
Ozzie PHP

Ozzie PHP

17/02/2012 12:06:36
Quote Anchor link
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.
 
Jaron T

Jaron T

17/02/2012 12:27:22
Quote Anchor link
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

Ozzie PHP

17/02/2012 12:32:31
Quote Anchor link
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.
 
Kees Schepers

kees Schepers

17/02/2012 12:56:46
Quote Anchor link
Zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
bestanden.0.naam = 'test'
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
bestanden
    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
 
Ozzie PHP

Ozzie PHP

17/02/2012 13:06:03
Quote Anchor link
Thanks Kees! Is het yaml of yml? Met welke functie parse je dat? Grt. Ozzie
 
Jurgen B

Jurgen B

17/02/2012 13:14:06
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
[section]
var[] = value1
var[] = value2

Array
(
    [section] => Array
        (
           [0] => value1
           [1] => value2
        )
)
Gewijzigd op 17/02/2012 13:16:20 door Jurgen B
 
Kees Schepers

kees Schepers

17/02/2012 13:21:34
Quote Anchor link
Symfony en ZF2 hebben wel yml reader classes, daar kun je wel wat nuttigs uithalen denk ik :) En yml is afkorting van yaml :p
 
Wouter J

Wouter J

17/02/2012 14:51:08
 
Jacco Brandt

Jacco Brandt

17/02/2012 15:27:29
Quote Anchor link
Ik was te lui om het hele topic door te lezen, maar als je dit gebruikt moet het wel lukken:

schrijven:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
writefunction(addslashes(json_encode($array)));


Ophalen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
readfunction(json_decode(stripslashes($array), true));
 
Ozzie PHP

Ozzie PHP

17/02/2012 16:56:44
Quote Anchor link
@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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
var[] : naam = de_naam
    pad = het/pad


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...
 
Wouter J

Wouter J

17/02/2012 16:59:41
Quote Anchor link
Of je gebruikt gewoon YAML files. Daarin kan het wel.

Tevens kan je in ini dit doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
files[0].name = hello world
files[0].path = foo/bar

files[1].name = foo
files[1].path = bar/foo
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.