Extract(): Skillnad mellan sidversioner
Admin (diskussion | bidrag) (→Noter) |
Admin (diskussion | bidrag) |
||
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.