Extract(): Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
 
Rad 22: Rad 22:
: Hur ogiltiga/numeriska nycklar och kollisioner behandlas bestäms av extraheringsflaggorna. Det kan vara ett av följande värden:
: Hur ogiltiga/numeriska nycklar och kollisioner behandlas bestäms av extraheringsflaggorna. Det kan vara ett av följande värden:


* EXTR_OVERWRITE
* [[EXTR_OVERWRITE]]
   : Om det finns en kollision, skriv över den befintliga variabeln.
   : Om det finns en kollision, skriv över den befintliga variabeln.
* EXTR_SKIP
* [[EXTR_SKIP]]
   : Om det finns en kollision, skriv inte över den befintliga variabeln.
   : Om det finns en kollision, skriv inte över den befintliga variabeln.
* EXTR_PREFIX_SAME
* [[EXTR_PREFIX_SAME]]
   : Om det finns en kollision, prefixa variabelnamnet med prefix.
   : Om det finns en kollision, prefixa variabelnamnet med prefix.
* EXTR_PREFIX_ALL
* EXTR_PREFIX_ALL

Nuvarande version från 11 augusti 2024 kl. 05.09

extract

(PHP 4, PHP 5, PHP 7, PHP 8)

extract — Importerar variabler till den aktuella symboltabellen från en array

Beskrivning

extract(array &$array, int $flags = EXTR_OVERWRITE, string $prefix = ""): int Importerar variabler från en array till den aktuella symboltabellen.

Kontrollerar varje nyckel för att se om den har ett giltigt variabelnamn. Det kontrolleras också för kollisioner med befintliga variabler i symboltabellen.

Varning Använd inte extract() på opålitliga data, som användarinput (t.ex. $_GET, $_FILES).

Parametrar

array
En associativ array. Denna funktion behandlar nycklar som variabelnamn och värden som variabelvärden. För varje nyckel/värde-par kommer den att skapa en variabel i den aktuella symboltabellen, beroende på flags och prefix-parametrar.

Du måste använda en associativ array; en numeriskt indexerad array kommer inte att producera resultat om du inte använder EXTR_PREFIX_ALL eller EXTR_PREFIX_INVALID.

flags
Hur ogiltiga/numeriska nycklar och kollisioner behandlas bestäms av extraheringsflaggorna. Det kan vara ett av följande värden:
 : Om det finns en kollision, skriv över den befintliga variabeln.
 : Om det finns en kollision, skriv inte över den befintliga variabeln.
 : Om det finns en kollision, prefixa variabelnamnet med prefix.
  • EXTR_PREFIX_ALL
 : Prefixa alla variabelnamn med prefix.
  • EXTR_PREFIX_INVALID
 : Prefixa endast ogiltiga/numeriska variabelnamn med prefix.
  • EXTR_IF_EXISTS
 : Skriv endast över variabeln om den redan finns i den aktuella symboltabellen, annars gör ingenting. Detta är användbart för att definiera en lista med giltiga variabler och sedan extrahera endast de variabler du har definierat från $_REQUEST, till exempel.
  • EXTR_PREFIX_IF_EXISTS
 : Skapa endast prefixade variabelnamn om den oprefixade versionen av samma variabel finns i den aktuella symboltabellen.
  • EXTR_REFS
 : Extraherar variabler som referenser. Detta innebär effektivt att värdena på de importerade variablerna fortfarande refererar till värdena på arrayparametern. Du kan använda denna flagga på egen hand eller kombinera den med någon annan flagga genom att OR:a flaggorna.

Om flags inte specificeras antas det vara EXTR_OVERWRITE.

prefix
Notera att prefix endast krävs om flags är EXTR_PREFIX_SAME, EXTR_PREFIX_ALL, EXTR_PREFIX_INVALID eller EXTR_PREFIX_IF_EXISTS. Om det prefixade resultatet inte är ett giltigt variabelnamn importeras det inte till symboltabellen. Prefix separeras automatiskt från arraynyckeln med ett understreck.

Returvärden

Returnerar antalet variabler som framgångsrikt importerats till symboltabellen.

Exempel

Exempel #1 extract() exempel

Ett möjligt användningsområde för extract() är att importera till symboltabellen variabler som finns i en associativ array som returneras av wddx_deserialize().

<?php

/* Anta att $var_array är en array som returneras från
   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";

?>

Ovanstående exempel kommer att skriva ut:

blue, large, sphere, medium

$size skrevs inte över eftersom vi angav EXTR_PREFIX_SAME, vilket resulterade i att $wddx_size skapades. Om EXTR_SKIP hade specificerats, skulle $wddx_size inte ens ha skapats. EXTR_OVERWRITE skulle ha orsakat att $size fick värdet "medium", och EXTR_PREFIX_ALL skulle resultera i att nya variabler namngavs $wddx_color, $wddx_size och $wddx_shape.

Noter

Varning

Använd inte extract() på opålitliga data, som användarinput (dvs. $_GET, $_FILES, etc.). Om du gör det, se till att du använder en av de icke-överskrivande flaggvärdena som EXTR_SKIP och var medveten om att du bör extrahera i samma ordning som definieras i variables_order i php.ini.

Se även

compact()
Skapa array som innehåller variabler och deras värden
list()
Tilldela variabler som om de vore en array

Exempel på användning av extract()

Följande exempel illustrerar olika sätt att använda extract()-funktionen i PHP.

Exempel #1 Grundläggande Användning

<?php
// Anta att vi har följande array
$data = array("name" => "John", "age" => 25);
// Använd extract för att skapa variabler $name och $age
extract($data);
echo "Namn: $name, Ålder: $age";  // Ut: Namn: John, Ålder: 25
?>

Exempel #2 Använda Prefix

<?php
// Använda EXTR_PREFIX_ALL för att undvika namnkonflikter
$data = array("name" => "Alice", "age" => 30);
extract($data, EXTR_PREFIX_ALL, "user");
echo "Namn: $user_name, Ålder: $user_age";  // Ut: Namn: Alice, Ålder: 30
?>

Exempel #3 Hantera Kollisioner med EXTR_SKIP

<?php
$name = "Oscar";
$data = array("name" => "Emma", "age" => 22);
// Namnet $name är redan definierat, så det kommer inte att skrivas över
extract($data, EXTR_SKIP);
echo "Namn: $name, Ålder: $age";  // Ut: Namn: Oscar, Ålder: 22
?>

Exempel #4 Endast Extrahera Existerande Variabler

<?php
$age = 40;
$data = array("name" => "Sophia", "age" => 35);
// Endast variabler som redan finns i symboltabellen kommer att skrivas över
extract($data, EXTR_IF_EXISTS);
echo "Ålder: $age";  // Ut: Ålder: 35
?>

Exempel #5 Extrahera med Referenser

<?php
$data = array("name" => "Liam", "age" => 27);
// Extraherar variabler som referenser
extract($data, EXTR_REFS);
$age += 3; // Ändrar både $age och 'age' i $data
echo "Ålder: $age, Original från array: " . $data['age'];  // Ut: Ålder: 30, Original från array: 30
?>

Dessa exempel demonstrerar olika sätt att använda `extract()` för att på ett effektivt sätt hantera data från en associativ array till individuella variabler i PHP.