Multidim. array bijwerken
(Dit is mijn eerste script die ik hier post, dus opmerkingen zijn welkom.)
Ik kwam laatst bij een configuration class een probleem tegen. Ik had mijn instellingen in een multidimensionale array staan, werkte perfect. Maar als ik nou enkele dieper gelegen elementen wilde bijwerken of verwijderen gaf dat problemen.
Moeilijk uit te leggen zonder een voorbeeldje (en dan nog):
Stel ik heb de volgende (verkorte) configuratie in een array (print_r()'d):
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(
[password] => 9591ecda6dca858a2bd009a00d0b7c3e
[mysql] => Array
(
[0] => Array
(
[host] => localhost
[user] => sqluser1
[pass] => Pass1
[port] => port
)
[1] => Array
(
[host] => external
[user] => sqluser2
[pass] => Pass2
[port] => port
)
)
)
(ik heb dus meerdere MySQL profielen)
Als ik nu $cfg['mysql'][0]['host'] wil veranderen, kan ik dat wel mooi zo doen:
$cfg['mysql'][0]['host'] = '127.0.0.1';
Maar dat is natuurlijk niet mooi als je bijvoorbeeld classes gebruikt. Hoe geef je de dieper gelegen keys dan door aan een functie (of method, in mijn geval) ?
Doorgeven als parameters is geen optie, dat is alleen maar meer werk, en je kan maar één waarde per keer bijwerken.
Een 'nieuwe' array als parameter doorgeven is natuurlijk het makkelijkste. Maar hoe kan je die dan 'combineren' met je huidige configuratie array? Hiervoor heb ik alle array_* functies van php zelf bekeken, maar geen goede oplossing gevonden. array_merge() doet wel iets soortgelijks, maar als je bijvoorbeeld $new_cfg['mysql'] meegeeft waar alleen ['host'] in is geset omdat je alleen die wilt veranderen, bevat $cfg['mysql'] alleen nog de key ['host'].
Een beetje moeilijk uit te leggen, maar het komt erop neer dat php's array functies níet álleen keys veranderen waarvan je dat wilt.
Dit is de functie die ik hiervoor geschreven heb (origineel een method voor mijn class, maar heb hem even veranderd naar een functie):
Gesponsorde koppelingen
PHP script bestanden
Er zijn 2 reacties op 'Multidim array bijwerken'
Om te reageren heb je een account nodig en je moet ingelogd zijn.
PHP hulp
0 seconden vanaf nu