[PHP] Array's mergen lukt niet goed

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een functie waarmee ik variabelen verzamel om later in een template de {tokens} mee te vervangen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function theme($type, $content) {
  global $theme;

  if ($type == 'buttons') {
    if (is_array($theme['buttons'])) {
      array_merge($theme['buttons'], $content);
    }
    else {
      $theme['buttons'] = array($content);
    }
  }
}

$button = array('pagina aanpassen', 'pagina verwijderen');
theme('buttons', $button);

$button = array('artikel aanpassen');
theme('buttons', $button);

//print_r($theme['buttons']);

De uitkomst van de print_r is
code:
1
2
3
4
5
Array (
  [0] => Array (
    [0] => pagina aanpassen [1] => pagina verwijderen
  )
)

Terwijl ik verwachtte het volgende als resultaat te krijgen:
code:
1
2
3
4
5
Array (
  [0] => 'pagina aanpassen',
  [1] => 'pagina verwijderen',
  [2] => 'artikel aanpassen'
)

Waar is mijn code fout? Volgens mij gaat het fout in regel 9, maar hoe dit op te lossen? Van array($content) gewoon $content maken werkt nl. niet...

Acties:
  • 0 Henk 'm!

  • Terranca
  • Registratie: April 2000
  • Laatst online: 18-09 18:25
Ik ben het met je eens dat het in regel 9 fout gaat, maar wat gebeurt er dan als je er gewoon $content van maakt?? Nu maak je er inderdaad (zoals print_r aangeeft) een dubbele array van omdat je de $content array nog een keer als array element meegeeft...

Acties:
  • 0 Henk 'm!

  • X-trace
  • Registratie: Juni 2004
  • Laatst online: 02-11-2024
waarom plak je de nieuwe waarden niet gewoon achter aan de array ipv een merge?

You cannot not communicate


Acties:
  • 0 Henk 'm!

  • GoVegan
  • Registratie: Juni 2002
  • Laatst online: 28-07 15:05
(jarig!)
Klopt op regel 9 ga je fout, daar gooi je een array (content) in een nieuwe array, die je weer in $theme['buttons'] zet.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
function theme($type, $content) {
  global $theme;

  if ($type == 'buttons') {
    if (is_array($theme['buttons'])) {
      foreach($content as $v){
        $theme['buttons'][]=$v;
    }
    } 
    else {
        foreach($content as $v){
            $theme['buttons'][]=$v;
        }
    }
  }
}

$button = array('pagina aanpassen', 'pagina verwijderen');
theme('buttons', $button);

$button = array('artikel aanpassen');
theme('buttons', $button);

print_r($theme['buttons']);
?>

[ Voor 57% gewijzigd door GoVegan op 08-08-2007 13:27 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Terranca schreef op woensdag 08 augustus 2007 @ 13:22:
[...] maar wat gebeurt er dan als je er gewoon $content van maakt??
Dan is de uitkomst van print_r
code:
1
2
3
4
Array (
  [0] => pagina aanpassen 
  [1] => pagina verwijderen
)

Met andere woorden: 'artikel aanpassen' wordt wel door de functie gehaald, maar niet meegenomen in de $theme['buttons'] array (omdat het geen array is?). De code van GoVegan levert het goede resultaat op, al snap ik nog niet precies waarom. Dank je! Ik ga uitzoeken hoe het werkt :)

-- edit --

Welbeschouw werkt dit dus ook:
PHP:
1
2
3
4
5
6
7
8
9
function theme($type, $content) {
  global $theme;

  if ($type == 'buttons') {
    foreach($content as $v){
      $theme['buttons'][]=$v;
    }
  } 
}

:)

[ Voor 23% gewijzigd door Verwijderd op 08-08-2007 13:32 ]


Acties:
  • 0 Henk 'm!

  • Terranca
  • Registratie: April 2000
  • Laatst online: 18-09 18:25
Verwijderd schreef op woensdag 08 augustus 2007 @ 13:29:
[...]

Dan is de uitkomst van print_r
code:
1
2
3
4
Array (
  [0] => pagina aanpassen 
  [1] => pagina verwijderen
)

Met andere woorden: 'artikel aanpassen' wordt wel door de functie gehaald, maar niet meegenomen in de $theme['buttons'] array (omdat het geen array is?). De code van GoVegan levert het goede resultaat op, al snap ik nog niet precies waarom. Dank je! Ik ga uitzoeken hoe het werkt :)
Mooi dat het gelukt is en de code in je resultaat is inderdaad ook wel wat netter :) Maar heb nog even gekeken en dat het 3e element er niet bij komt, is omdat je de resulterende array niet opslaat in $theme. Had je er

PHP:
1
$theme['buttons'] = array_merge($theme['buttons'], $content);

(regel 6) van gemaakt, had het ook gewoon gewerkt :)

bron: php.net/array_merge : "array_merge() merges the elements of one or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array."

[ Voor 11% gewijzigd door Terranca op 08-08-2007 13:37 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Terranca schreef op woensdag 08 augustus 2007 @ 13:36:
[...] Mooi dat het gelukt is en de code in je resultaat is inderdaad ook wel wat netter :) Maar heb nog even gekeken en dat het 3e element er niet bij komt, is omdat je de resulterende array niet opslaat in $theme. [...]
|:(

Bedankt voor de uitleg :)
Pagina: 1