[php] array_merge_recursive

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • chielsen
  • Registratie: Oktober 2003
  • Laatst online: 20-09 01:17
Ik zit met een array_merge_recursive vraagje.

Ik dacht eerst dat het arrays recursief merged. Dat doet ie op een zeker hoogte wel, maar onder mergen versta ik dezelfde gegevens overschrijven, zoals dat ook met array_merge gaat.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$array['naam'] = 'Michiel';
$array['achternaam'] = 'Thalen';
$array['adres'] = 'Delft';
$array['leeftijd'] = '19';
$array['kinderen'][0] = 'Eef';
        
$array2['naam'] = 'Michiel';
$array2['sekse'] = 'M';
$array2['kinderen'][0] = 'Mariek';
$array2['kinderen'][1] = 'Suzanne';
        
print_r(array_merge_recursive($array, $array2));


Dit levert dit op :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Array
(
    [naam] => Array
        (
            [0] => Michiel
            [1] => Michiel
        )

    [achternaam] => Thalen
    [adres] => Delft
    [leeftijd] => 19
    [kinderen] => Array
        (
            [0] => Eef
            [1] => Mariek
            [2] => Suzanne
        )

    [sekse] => M
)



Nu doet ie kinderen goed, hij zet de verschillende elementen onder elkaar in een array. Naam gaat echter niet goed. naam is gewoon een string, met ook nog eens dezelfde waarde. En toch maakt ie er een array van en zet ze onder elkaar. Dit moet gewoon hetzelfde blijven als in de oorspronkelijke arrays. Kan ik hiervoor iets aanpassen of moet ik mijn eigen functie schrijven.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Dit is exact zoals de functie in de manual gedefinieerd is:
Als de input arrays dezelfde string keys hebben worden de waarden voor deze keys samengevoegd in een array
Voor deze specifieke bewerking zul je dus zelf een functie moeten schrijven.

Ik zie trouwens best vaak dat array's (eigenlijk zijn het met key value pairs meer maps/associative arrays) op deze manier gebruikt worden. Imho kun je hiervoor veel beter een class gebruiken (desnoods enkel als struct). Dat maakt het een stuk overzichtelijker en minder fout gevoelig.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'