[PHP] $_GET wordt zomaar veranderd

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • robbert
  • Registratie: April 2002
  • Laatst online: 20:37
Hoi,

ik heb een functie geschreven die 2 array's recursief samenvoegt:
PHP:
1
2
3
4
5
6
7
8
9
10
function mergearray($array1, $array2) {
    foreach(array_keys($array1) as $key) {
        if(!isset($array2[$key]) || !is_array($array2[$key])) {
            $array2[$key] = $array1[$key];
        } else {
            $array2[$key] = mergearray($array1[$key], $array2[$key]);
        }
    }
    return $array2; 
}


Mijn idee is dat ik hiermee aan de get parameters nog wat extra parameters kan toevoegen of kan wijzigen, door middel van:
PHP:
1
$param = mergearray($param, $_GET);


Om een of andere reden die ik niet kan vinden wordt $_GET aangepast. Wat helemaal niet zou mogen. Ik geef hem tenslotte niet by reference mee. Bijvoorbeeld:
$param voor
code:
1
2
3
4
5
6
7
8
Array
(
    [nieuws] => Array
        (
            [sorteer] => datum
            [sorteerrichting] => asc
        )
)

$_GET voor
code:
1
2
3
4
5
6
7
8
9
10
Array
(
    [loadmod] => nieuws
    [nieuws] => Array
        (
            [sorteer] => titel
            [sorteerrichting] => desc
        )

)

$_GET na
code:
1
2
3
4
5
6
7
8
9
10
Array
(
    [loadmod] => nieuws
    [nieuws] => Array
        (
            [sorteer] => datum
            [sorteerrichting] => asc
        )

)


Het rare is dat dit helemaal niet mag kunnen, als ik dit zo los uitprobeer gaat het wel goed. Maar in mijn gehele programma (wat ik hier natuurlijk moeilijk kan posten) gaat het verkeerd.
k snap niet hoe dat kan komen, als ik die functie niet aanroep gaat het dus wel goed. Maar die functies mag helemaal niet $_GET veranderen lijkt me toch?

Iemand een idee?

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Wat is er mis met array_merge() en array_merge_recursive() :?

edit: die hebben wat moeite met overschrijven van waardes

maaruh.. dit kan dus niet wat je beschrijft... sterker nog, heb je code net even geprobeerd en bij mij wordt er niks aangepast :?

[ Voor 115% gewijzigd door Bosmonster op 30-12-2005 23:53 ]


Acties:
  • 0 Henk 'm!

  • robbert
  • Registratie: April 2002
  • Laatst online: 20:37
Bosmonster schreef op vrijdag 30 december 2005 @ 23:33:
Wat is er mis met array_merge() en array_merge_recursive() :?

edit: die hebben wat moeite met overschrijven van waardes
Inderdaad, die hebben moeite met overschrijven van waardes
maaruh.. dit kan dus niet wat je beschrijft... sterker nog, heb je code net even geprobeerd en bij mij wordt er niks aangepast :?
Dat dacht ik ook al, dit kan helemaal niet.
Maar toch gebeurt het, het vreemde is dus als ik alleen bovenstaande probeer gaat het wel goed, maar in mijn programma niet. Dit is toch zo raar.

Ik ga het eens op een andere server met een andere versie van php proberen.

[ Voor 5% gewijzigd door robbert op 31-12-2005 00:01 ]


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

Betekent meestal dat de fout ergens anders zit :). Doe eens een print_r direct ná dat statement, en ook een print_r voor het statement, om te zien of het niet perongeluk ergens anders gebeurt.

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Welke php versie heb je het over?

PHP4 geeft alles by-value door, PHP5 geeft juist alles by-ref door, iirc.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • robbert
  • Registratie: April 2002
  • Laatst online: 20:37
MBV schreef op zaterdag 31 december 2005 @ 00:05:
Betekent meestal dat de fout ergens anders zit :). Doe eens een print_r direct ná dat statement, en ook een print_r voor het statement, om te zien of het niet perongeluk ergens anders gebeurt.
Dat had ik dus gedaan, ik had dus print_r($_GET) voor en na dat ik die functie aanroep gedaan. Dus daarmee zou de fout nergens anders vandaan kunnen komen toch?
Grijze Vos schreef op zaterdag 31 december 2005 @ 04:31:
Welke php versie heb je het over?

PHP4 geeft alles by-value door, PHP5 geeft juist alles by-ref door, iirc.
php4

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

Wat gebeurt er als je een tijdelijke variabele $returnValue maakt? En wat gebeurt er als $array2 langer is dan $array1 en vice-versa?

Enneh, waarom draai je het niet gewoon om, zodat geen kopie gemaakt hoeft te worden? Dus mergearray($ar1, $ar2) waarbij $ar1 de gemergde rij is? ben je toch ook klaar? :)
Dat zou heel veel kopiëren schelen, en aangezien dat bij elke functiecall moet gebeuren en het ding recursief werkt, scheelt dat veel tijd :)
Pagina: 1