Avatar billede kernelx Juniormester
19. september 2005 - 09:17 Der er 6 kommentarer og
1 løsning

Array og hash (2)

$hash{'a'}='a1';
$hash{'b'}='b1';
$array[0] = \%hash;

$hash{'a'}='a2';
$hash{'b'}='b2';
$array[1] = \%hash;

Den virker ikke.
Findes der en løsning, hvor man siger at %hash skal referencere til en anden (ny) adresse?

med venlig hilsen
KernelX
Avatar billede nielle Nybegynder
19. september 2005 - 09:22 #1
I din kode er %hash (doh) en hash og $array[0] og $array[1] peger begge to på den samme %hash. Der er altså ikek %hash selv som peger på en adresse.

Hvad mener du præcist med at "%hash skal referencere til en anden (ny) adresse?"? Hvad er det for en effekt du gerne vil opnå?
Avatar billede kernelx Juniormester
19. september 2005 - 09:39 #2
mit problem er, at %hash hele tiden har den samme adresse.
Der bliver lavet en DB-connection - og hver gang den for fat i en nye værdier i en while-sløjfe, skal de in i et array, sådan at arrayet refererer til hashen med værdierne.
---
while (ny row)
{
    $hash{'col1'} = $col1;
    $hash{'col2'} = $col2;

    $array[$arrayIndex] = \%hash;
    $arrayIndex++;
}
---

som man kan se, peger referencen hele tiden på det samme sted. jeg vil på en eller anden måde sørge for, at

# %hash har adresse 1
$hash{'a'}='a1';
$hash{'b'}='b1';

og

# %hash har adresse 2
$hash{'a'}='a2';
$hash{'b'}='b2';

---

for at komme tilbage til eksemplet:
----
$hash{'a'}='a1';
$hash{'b'}='b1';
$array[0] = \%hash;

# delete %hash
# ny %hash med ny adresse

$hash{'a'}='a2';
$hash{'b'}='b2';
$array[1] = \%hash;
---

sorry, jeg er måske ikke så god til at forklare, hvad jeg vil ud på.
Men jeg giver mit bedste :-)
Avatar billede nielle Nybegynder
19. september 2005 - 09:47 #3
Så vidt jeg kan forstå så ønsker du at gemme referencen til værdierne fra databasen i dit array efterhånden som du henter dem?

Det burde denne kode kunne gøre:

while ($hash = $result->fetchrow_hashref)
{
    $array[$arrayIndex] = $hash;
    $arrayIndex++;   
}

- (så har du referencerne i dit array), eller denne:

while ($hash = $result->fetchrow_hashref)
{
    $array[$arrayIndex] = %$hash;
    $arrayIndex++;   
}

- (så har du selve hashen i dit array.)
Avatar billede kernelx Juniormester
19. september 2005 - 09:50 #4
jeg har fundet en løsning uden referencer.
---
$hash{'a'}='a1';
$hash{'b'}='b1';
$array[0] = {%hash};

$hash{'a'}='a2';
$hash{'b'}='b2';
$array[1] = {%hash};
---
Avatar billede kernelx Juniormester
19. september 2005 - 09:51 #5
nielle - du glemte at skrive svar :-)
Avatar billede kernelx Juniormester
19. september 2005 - 10:01 #6
pga. points
Avatar billede nielle Nybegynder
19. september 2005 - 10:03 #7
Svar :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester