end
in_array
Функции для работы с массивами
PHP Manual

# extract

(PHP 4, PHP 5)

extract — Импортировать переменные из массива в текущую символьную таблицу.

### Описание

int extract ( array `$var_array` [, int `$extract_type` [, string `$prefix` ]] )

Эта функция используется для импорта переменных из массива в текущую символьную таблицу. Она берёт ассоциативный массив в качестве параметра `var_array` и трактует его ключи как имена переменных и значения как значения переменных. Для каждой пары ключ/значение будет создана переменная в текущей символьной таблице, согласно параметрам `extract_type` и `prefix` .

> Замечание: Начиная с версии 4.0.5, эта функция возвращает количество извлечённых переменных.

> Замечание: `EXTR_IF_EXISTS` и `EXTR_PREFIX_IF_EXISTS` были добавлены в версии 4.2.0.

> Замечание: `EXTR_REFS` был добавлен в версии 4.3.0.

extract() проверяет каждый ключ на соответствие приемлемости в качестве имени переменной. Эта функция также обрабатывает коллизии имён, если ключ совпадает с именем переменной, уже существующей в текущей символьной таблице. Способ обработки неприемлемых/числовых ключей и коллизий имён устанавливает параметр `extract_type` . Он может принимать одно из следующих значений:

`EXTR_OVERWRITE`
  Если переменная с таким именем существует, она будет переназначена.
`EXTR_SKIP`
  Если переменная с таким именем существует, будет сохранено её прежнее значение.
`EXTR_PREFIX_SAME`
  Если переменная с таким именем существует, к её имени будет добавлен префикс, определённый параметром `prefix` .
`EXTR_PREFIX_ALL`
  Добавить префикс `prefix` ко всем именам переменных. Начиная с PHP 4.0.5, также включает числовые имена.
`EXTR_PREFIX_INVALID`
  Добавить префикс `prefix` только к неприемлемым/числовым именам переменных. Этот флаг был добавлен в PHP 4.0.5.
`EXTR_IF_EXISTS`
  Переназначить только переменные, уже имеющиеся в текущей символьной таблице, в противном случае ничего не делать. Данная возможность полезна для определения списка приемлемых переменных и для извлечения только тех переменных, которые вы уже определили из массивов типа $_REQUEST, например. Этот флаг был добавлен в PHP 4.2.0.
`EXTR_PREFIX_IF_EXISTS`
  Создать переменные, имена которых начинаются с `prefix` только если переменная с названием, которому не предшествует `prefix` , определена в текущей символьной таблице. Этот флаг был добавлен в PHP 4.2.0.
`EXTR_REFS`
  Извлечь переменные как ссылки. Это означает, что значения таких переменных будут всё ещё ссылаться на значения массива `var_array` . Вы можете использовать этот флаг отдельно или комбинировать его с другими, используя OR. Этот флаг был добавлен в PHP 4.3.0.

Если `extract_type` не определён, он трактуется как `EXTR_OVERWRITE`.

Обратите внимание, что `prefix` имеет значение, только если `extract_type` установлен в `EXTR_PREFIX_SAME`, `EXTR_PREFIX_ALL`, `EXTR_PREFIX_INVALID` или `EXTR_PREFIX_IF_EXISTS`. Если в результате добавления префикса, не будет получено допустимое имя для переменной, она не будет импортирована в текущую символьную таблицу.

extract() возвращает количество переменных, успешно импортированных в символьную таблицу.

Внимание

Не используйте функцию extract() для непроверенных данных, таких как пользовательский ввод ($_GET, ...). Если вы сделаете это, например, для того, что бы временно запустить старый код, использующий register_globals, используйте соответствующий флаг `extract_type` для того, что бы не переназначить уже установленные переменные, такой как `EXTR_SKIP` и удостоверьтесь, что вы извлекаете содержимое массивов $_SERVER, $_SESSION, $_COOKIE, $_POST и $_GET в этом порядке.

Функцию extract() также можно использовать для импорта в текущую символьную таблицу переменных, содержащихся в ассоциативном массиве, возвращённом функцией wddx_deserialize().

Пример #1 Пример использования extract()

`<?php
/* Предположим, что $var_array - это массив, полученный в результате
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
";
?>`

Результат выполнения данного примера:

    blue, large, sphere, medium

Переменная $size не была переназначена, потому что мы определили `EXTR_PREFIX_SAME`, в результате чего была создана переменная $wddx_size. Если был бы определён флаг `EXTR_SKIP`, тогда переменная $wddx_size не была бы создана. `EXTR_OVERWRITE` был бы причиной того, что переменной $size было бы присвоено значение "medium", и `EXTR_PREFIX_ALL` был бы причиной того, что были бы также созданы новые переменные $wddx_color, $wddx_size и $wddx_shape.

Вы должны использовать ассоциативный массив, использование числовых массивов не приведёт ни к каким результатам, если вы не использууете `EXTR_PREFIX_ALL` и `EXTR_PREFIX_INVALID`.

См. также compact().

end
in_array
Функции для работы с массивами
PHP Manual