Podręcznik PHP
Poprzedni |  | Następny

# extract

(PHP 3 >= 3.0.7, PHP 4, PHP 5)

extract -- Importuj zmienne do bieżącej tablicy symboli z tablicy

## Opis

int extract ( array 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.

> Notatka: Od wersji 4.0.5 ta funkcja zwraca liczbę wyekstrahowanych zmiennych.

> Notatka: Stałe `EXTR_IF_EXISTS` i `EXTR_PREFIX_IF_EXISTS` zostały dodane w PHP 4.2.0.

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

Ostrzeżenie

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

Poprzedni | Spis treści | Następny
end | Początek rozdziału | in_array