Forum und email

extract

(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.

Note: Vi starter ved version 4.0.5, hvor denne funktion returnerede antallet af variabler som blev udpakket.

Note: EXTR_IF_EXISTS og EXTR_PREFIX_IF_EXISTS blev tilføjet i version 4.2.0.

Note: 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.

Warning

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().

Example#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_arrayEXTR_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().