Multidim. array bijwerken

Door Iisys , 20 jaar geleden, 2.764x bekeken

(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):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Array
(
    [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

  1. multidim-array-bijwerken

 

Er zijn 2 reacties op 'Multidim array bijwerken'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
- -
- -
20 jaar geleden
 
0 +1 -0 -1
Ziet er erg handig uit!

Edit: Misschien netter om 'm array_update() te noemen, dat sluit aan bij de andere array_*()-functies.
Iisys
iisys
20 jaar geleden
 
0 +1 -0 -1
@ Jonathan,
Klopt, heb ik ook gedaan, ik zie nu alleen dat ik het bij het gebruiksvoorbeeld heb omgedraaid. Ik zal het even veranderen.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. multidim-array-bijwerken

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.