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 i EXTR_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
- Jeśli istnieje kolizja, nadpisz istniejącą zmienną.
- EXTR_SKIP
- Jeśli istnieje kolizja, nie nadpisuj istniejącej zmiennej.
- EXTR_PREFIX_SAME
- Jeśli istnieje kolizja, na początek nazwy zmiennej wstaw prefiks .
- EXTR_PREFIX_ALL
- Na początek każdej nazwy zmiennej wstaw prefiks . Od PHP 4.0.5 dotyczy to także nazw numerycznych.
- EXTR_PREFIX_INVALID
- Wstaw prefiks na początek złych/numerycznych nazw. Ta flaga została dodana w PHP 4.0.5.
- EXTR_IF_EXISTS
- Nadpisz tylko zmiennÄ… już istniejÄ…cÄ… w bieżącej tablicy symboli. Jest to przydatne do definiowania listy poprawnych zmiennych i ekstrahuj tylko te zmienne które zdefiniowano na przykÅ‚ad w $_REQUEST. Flaga ta zostaÅ‚a dodana w PHP 4.2.0.
- EXTR_PREFIX_IF_EXISTS
- Przedrostek zostanie dodany tylko do zmiennych których odpowiedniki bez przedrostka już istniejÄ… w bieżącej tablicy symboli. Flaga ta zostaÅ‚a dodana w PHP 4.2.0.
- EXTR_REFS
- Ekstraktuje zmienne jako referencje. Oznacza to, że wartości zaimportowanych zmiennych ciągle odnoszą się do wartości parametru 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().
Kompatybilność: PHP4, PHP5.
Listing
/* 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.
Ranga: Administrator serwisu Punktów: 38473

