PHP Manualen
forrige |  | næste

# extract

(PHP 3 >= 3.0.7, PHP 4, PHP 5)

extract -- Sætter variabler efter indholdet af et array

## Beskrivelse

int extract ( array var_array [, int extract_type [, string prefix]] )

Denne funktion bruges til at fremstille variabler fra et array. Den tager et associativ array var_array og behandler nøglerne som variablenavne og værdierne som de nye variablers værdier. For hvert nøgle/værdi par vil den lave en variable, alt efter hvad extract_type og prefix er sat til.

> Bemærk: Vi starter ved version 4.0.5, hvor denne funktion returnerede antallet af variabler som blev udpakket.

> Bemærk: `EXTR_IF_EXISTS` og `EXTR_PREFIX_IF_EXISTS` blev tilføjet i version 4.2.0.

> Bemærk: `EXTR_REFS` blev tilføjet i version 4.3.0.

extract() kontrollerer hver nøgle for at se om det er et korrekt variablenavn. Den tjekker også for om der allerede er sat en variable med det navn. Måden ukorrekte variablenavne og sammenfald med tidligere variabler skal behandles på, bestemmes ved parameteren extract_type. Den kan blive sat til en af følgende værdier:

`EXTR_OVERWRITE`

  Hvis der er et sammenfald, overskriv den eksisterende variable.

`EXTR_SKIP`

  Hvis der er et sammenfald, overskriv ikke den eksisterende variable.

`EXTR_PREFIX_SAME`

  Hvis der er et sammenfald, tilføj prefix foran variablenavnet.

`EXTR_PREFIX_ALL`

  Start alle variabelnavne med prefix. I PHP 4.0.5 ville det også inklidere nummervariabler.

`EXTR_PREFIX_INVALID`

  Indsæt kun prefix foran ukorrekte/nummer variabler. Denne mulighed blev tilføjet i PHP 4.0.5.

`EXTR_IF_EXISTS`

  Overskriver kun variablen hvis den allerede findes og ellers skal den ikke gøre noget. Dette er brugbart ved definering af en liste af korrekte variablenavne og man derefter udpakker de variabler der er blevet sat med f.eks. $_REQUEST. Denne mulighed blev tilføjet i PHP 4.2.0.

`EXTR_PREFIX_IF_EXISTS`

  Fremstiller kun variablenavne med prefix, hvis den orginale version af samme variable allerede findes. Denne mulighed blev tilføjet i PHP 4.2.0.

`EXTR_REFS`

  Udpakker alle variabler som referencer. Det betyder at de nye variabler peger på de værdier der står i var_array parameteren. Du kan bruge denne indstilling som den eneste eller du kan sætte den sammen med andre værdier ved at indsætte OR mellem de to settings i extract_type. Denne indstilling blev muligt i PHP 4.3.0.

Hvis extract_type ikke er sat, vil den som som standard blive sat til `EXTR_OVERWRITE`.

Bemærk at prefix kun er krævet hvis extract_type er `EXTR_PREFIX_SAME`, `EXTR_PREFIX_ALL`, `EXTR_PREFIX_INVALID` eller `EXTR_PREFIX_IF_EXISTS`. Hvis variabelnavnet med prefix foran, ikke er et korrekt variablenavn, vil den variable ikke blive oprettet.

extract() returnerer antallet af variabler der er blevet oprettet korrekt.

Advarsel
Brug ikke extract() ved usikker data som f.eks. bruger-input ($_GET, ...). Hvis du gør dette, f.eks. hvis du ønsker at køre gammel kode som ikke bruger register_globals, vær sikker på at du bruger en af de ikke overskrivende indstillinger extract_type kan sættes til, som f.eks. `EXTR_SKIP` og pas på hvis du udpakker $_SERVER, $_SESSION, $_COOKIE, $_POST og $_GET i den rækkefølge.

Et eksempel hvor brugen af extract() ville være perfekt, er ved et associativt array fra funktionen wddx_deserialize().

Eksempel 1. extract() eksempel

`<?php /* Gå ud fra at $var_array er et array returneret af wddx_deserialize */ $size = "large"; $var_array = array("color" => "blue", "size" => "medium", "shape" => "sphere"); extract($var_array, EXTR_PREFIX_SAME, "wddx"); echo "$color, $size, $shape, $wddx_size\n"; ?>`

Ovenstående eksempel vil udskrive:

    blue, large, sphere, medium

Variablen $size blev ikke overskrevet, fordi vi havde sat `EXTR_PREFIX_SAME`, hvilket resultere i $wddx_size bliver lavet. Hvis `EXTR_SKIP` var bestemt, ville $wddx_size ikke engang blive lavet. `EXTR_OVERWRITE` ville have betydet at $size havde fået værdien "medium" og `EXTR_PREFIX_ALL` ville have betydet nye variablenavne kaldet $wddx_color, $wddx_size og $wddx_shape.

Du skal bruge et associativt array. Et array indekseret med numre vil ikke komme med et resultat med mindre at du bruger `EXTR_PREFIX_ALL` eller `EXTR_PREFIX_INVALID`.

Se også compact().

forrige | hjem | næste
end | op | in_array