(PHP 4, PHP 5)
extract — Importuj zmienne do bieżącej tablicy symboli z tablicy
$tablica_zmiennych
[, int $typ_ekstrakcji
[, string $prefiks
]] )
Ta funkcja służy do importowania zmiennych z tablicy do bieżącej tablicy
symboli. Pobiera jako parametr tablicę asocjacyjną
tablica_zmiennych
i traktuje klucze jako nazwy
zmiennych a wartości jako wartości tych zmiennych. Dla każdej pary
klucz/wartość w bieżącej tablicy symboli będzie stworzona zmienna, zależna
od parametrów typ_ekstrakcji
i
prefiks
.
Informacja:
Od wersji 4.0.5 ta funkcja zwraca liczbę wyekstrahowanych zmiennych.
Informacja:
Stałe
EXTR_IF_EXISTS
iEXTR_PREFIX_IF_EXISTS
zostały dodane w PHP 4.2.0.
Informacja:
Stała
EXTR_REFS
została dodana w PHP 4.3.0.
extract() sprawdza każdy klucz aby sprawdzić, czy
zawiera prawidłową nazwę zmiennej a także czy istnieją kolizje z
zmiennymi istniejącymi w tablicy symboli. Sposób traktowania złych nazw
zmiennych i kolizji jest określony przez parametr
typ_ekstrakcji
. Może być jedną z poniższych
wartości:
EXTR_OVERWRITE
EXTR_SKIP
EXTR_PREFIX_SAME
prefiks
.
EXTR_PREFIX_ALL
prefiks
.
Od PHP 4.0.5 dotyczy to także nazw numerycznych.
EXTR_PREFIX_INVALID
prefiks
na początek złych/numerycznych
nazw. Ta flaga została dodana w PHP 4.0.5.
EXTR_IF_EXISTS
EXTR_PREFIX_IF_EXISTS
EXTR_REFS
tablica_zmiennych
. Flaga ta może być użyta
sama lub w połączaniu z innymi flagami poprzez użycie operacji OR na
parametrze typ_ekstrakcji
. Została ona dodana
w PHP 4.3.0.
Jeśli typ_ekstrakcji
nie został podany, to
zakładana jest opcja EXTR_OVERWRITE
.
Zauważ, że parametr prefiks
jest wymagany tylko
jeśli typ_ekstrakcji
to
EXTR_PREFIX_SAME
,
EXTR_PREFIX_ALL
,
EXTR_PREFIX_INVALID
lub
EXTR_PREFIX_IF_EXISTS
. Jeśli nazwa zmiennej po
dodaniu prefiksu nie jest prawidłową nazwą zmiennej, nie jest
importowana do tablicy symboli. Prefiksy są automatycznie oddzielane od
kluczy tablicy poprzez znak "_".
extract() zwraca liczbę zmiennych szczęśliwie zaimportowanych do tablicy symboli.
Nie należy używać funkcji extract() na niepewnych
danych, jak na przykład danych odebranych od użytkownika ($_GET, ...).
Można tak zrobić na przykład w celu tymczasowego uruchomienia starych
skryptów, które zależne są od ustawienia register_globals. Należy jednak użyć
nie nadpisującego parametru typ_ekstrakcji
, jak
na przykład EXTR_SKIP
. Trzeba też pamiętać aby
ekstrahować zmienne w kolejności określonej przez opcję variables_order pliku php.ini.
Możliwa jest ekstrakcja zmiennych zawartych w tablicy asocjacyjnej zwróconej przez wddx_deserialize().
Przykład #1 Przykład użycia extract()
<?php
/* Załóżmy, że $tablica_zmiennych jest tablicą zwróconą przez
wddx_deserialize */
$rozmiar = "duży";
$tablica_zmiennych = array("kolor" => "niebieski",
"rozmiar" => "średni",
"ksztalt" => "kulisty");
extract($tablica_zmiennych, EXTR_PREFIX_SAME, "wddx");
echo "$kolor, $rozmiar, $ksztalt, $wddx_rozmiar\n";
?>
niebieski, duży, kulisty, średni
$rozmiar nie został nadpisany, ponieważ podany został
parametr EXTR_PREFIX_SAME
, przez co stworzona został
zmienna $wddx_rozmiar. Jeśli podana by była flaga
EXTR_SKIP
, to zmienna
$wddx_rozmiar nie zostałaby stworzona. Flaga
EXTR_OVERWRITE
spowodowałaby, że zmienna
$rozmiar miałaby wartość "średni", a
EXTR_PREFIX_ALL
spowodowałaby że wszystkie nowe
zmienne zostałyby nazwane $wddx_kolor,
$wddx_rozmiar, and $wddx_ksztalt.
Musisz użyć tablic asocjacyjnych. Tablica indeksowana liczbowo nie da
żadnych efektów, chyba że zostanie użyta flaga
EXTR_PREFIX_ALL
lub
EXTR_PREFIX_INVALID
.
Patrz także: compact().