array_push()

  • Författare
  • Meddelande

Wim4rk

html-kodare

  • Inlägg: 10
  • Blev medlem: 26 aug 2019, 12:38

array_push()

Inlägg17 sep 2019, 09:01

Fick ett oväntat resultat när jag använde array_push.

Kod: Markera allt
$keyArray = array(["Ireland"] => "Dublin
                               ["Hungary"] => "Budapest"
                               ["Denmark"] => "Copenhagen");

array_push($keyArray, $keyArray["Canada"] = "Ottawa");

print_r($keyArray);

Förväntade mig:
Kod: Markera allt
Array
(
        [Ireland] => Dublin
        [Hungary] => Budapest
        [Denmark] => Copenhagen
        [Canada] => Ottawa
)

Fick:
Kod: Markera allt
Array
(
        [Ireland] => Dublin
        [Hungary] => Budapest
        [Denmark] => Copenhagen
        [Canada] => Ottawa
        [0] => Ottawa
)
Array

Varifrån kom den sista nyckeln och värdet?
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11176
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: array_push()

Inlägg17 sep 2019, 09:25

Se manualen.
https://www.php.net/manual/en/function.array-push.php

Din konstruktion:
Kod: Markera allt
array_push($keyArray, $keyArray["Canada"] = "Ottawa");


Andra argumentet är like skevt.
Kod: Markera allt
$keyArray["Canada"] = "Ottawa"


Det är en tilldelning som du gör och resultatet från tilldelningen är "Ottawa". Du lägger alltså till strängen "Ottawa" i slutet av arrayen. Uppenbarligen jobbar array_push enbart på numeriska arrayer och därför ger den position 0 till "Ottawa". Du har nu en mixad array med både key/value och value (position).

Ungefär så. Okey?
...
..:
.... /mos

Wim4rk

html-kodare

  • Inlägg: 10
  • Blev medlem: 26 aug 2019, 12:38

Re: array_push()

Inlägg17 sep 2019, 09:40

Okey, ungefär så.

Jag läste manualen, och en tjock bok jag har här på skrivbordet. Det jag fortfarande inte förstår är varför array_push både lägger till det jag ber om och dessutom det sista paret. (Notera att näst sista raden i vektorn är rätt.)

(Sen vet jag att det finns ett bättre sätt att lägga till i slutet av en vektor, men jag vill ändå ha koll på det här.)
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11176
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: array_push()

Inlägg17 sep 2019, 09:54

Du får två nya entries i din array för att du lägger till två nya saker.

Det är konstruktionen:
Kod: Markera allt
$keyArray["Canada"] = "Ottawa"


Som ger dig det andra, eller det värdet du egentligen förväntade dig.

Egentligen behövde du enbart göra konstruktionen ovan. Det är när den ligger som argument 2 i ett anrop till array_push som du får det extra och sista elementet.

Kika på din konstruktion igen.
Kod: Markera allt
array_push($keyArray, $keyArray["Canada"] = "Ottawa");


Först händer denna delen, det är en tilldelning till en array/nyckel:
Kod: Markera allt
$keyArray["Canada"] = "Ottawa"


Det ger att $keyArray får ett key/value par om "Canada" => "Ottawa".

Resultatet av den tilldelningen blir "Ottawa", på samma sätt som ($val = 7) hade givit ett värde av 7.

Andra delen blir därför så här:
Kod: Markera allt
array_push($keyArray, "Ottawa");


Här lägger du till värdet "Ottawa" i slutet av arrayen (numerisk array) och nyckeln blir 0 eftersom det inte finns några andra numeriska nycklar i arrayen.
...
..:
.... /mos

Wim4rk

html-kodare

  • Inlägg: 10
  • Blev medlem: 26 aug 2019, 12:38

Re: array_push()

Inlägg17 sep 2019, 09:56

Då förstår jag mycket väl. Returen blir som ett eko. Intressant.

Tusen tack!
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11176
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: array_push()

Inlägg17 sep 2019, 10:03

Coolt. Vill man läsa mer om detta så är "Expressions" en bra start i manualen.
https://www.php.net/manual/en/language.expressions.php

När man förstår sånt här så blir språket tydligare och mer logiskt, enklare att felsöka.

Klipper en liten del från manualen om detta:
Consider the example we've already dealt with, '$a = 5'. It's easy to see that there are two values involved here, the value of the integer constant '5', and the value of $a which is being updated to 5 as well. But the truth is that there's one additional value involved here, and that's the value of the assignment itself. The assignment itself evaluates to the assigned value, in this case 5. In practice, it means that '$a = 5', regardless of what it does, is an expression with the value 5.
...
..:
.... /mos

Vilka är online

Användare som besöker denna kategori: Google [Bot] och 16 gäster