extract

(PHP 4, PHP 5, PHP 7, PHP 8)

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

Описание

extract(array&$array, int$flags = EXTR_OVERWRITE, string$prefix = ""): int

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

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

Внимание

Не вызывайте функцию extract() с ненадёжными данными наподобие пользовательского ввода (например, с суперглобальными переменными $_GET, $_FILES).

Список параметров

array

Ассоциативный массив. Функция трактует ключи массива как имена переменных, а значения — как значения переменных. Для каждой пары ключ/значение будет создана переменная в текущей таблице символов с учётом флагов (flags) и параметров префикса (prefix).

Без флагов EXTR_PREFIX_ALL или EXTR_PREFIX_INVALID функция работает только с ассоциативными массивами; индексный массив не даст результатов.

flags

Параметр flags определяет способ трактовки неправильных/числовых ключей и коллизий. Разрешено указывать одно из следующих значений:

EXTR_OVERWRITE
Если переменная с таким именем существует, она будет перезаписана.
EXTR_SKIP
Если переменная с таким именем существует, её текущее значение не будет перезаписано.
EXTR_PREFIX_SAME
Если переменная с таким именем существует, к её имени будет добавлен префикс, определённый параметром prefix.
EXTR_PREFIX_ALL
Добавить префикс prefix ко всем именам переменных.
EXTR_PREFIX_INVALID
Добавить префикс prefix только к некорректным/числовым именам переменных.
EXTR_IF_EXISTS
Перезаписать только те переменные, которые содержатся в текущей таблице символов, иначе ничего не делать. Это полезно для определения списка допустимых переменных и извлечения только тех из них, которые разработчик уже определил, например, из массива наподобие $_REQUEST.
EXTR_PREFIX_IF_EXISTS
Создать только префикс-версии переменных, если версия переменной без префикса уже содержится в текущей таблице символов.
EXTR_REFS
Извлечь переменные как ссылки. Это фактически означает, что значения импортированных переменных всё ещё будут ссылаться на значения массива array. Разрешено указывать этот флаг отдельно или комбинировать его с другими значениями параметра flags через побитовое «ИЛИ».

Если параметр flags не задан, он трактуется как флаг EXTR_OVERWRITE.

prefix

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

Возвращаемые значения

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

Примеры

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

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

<?php



$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";

?>

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

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.

Примечания

Внимание

Не стоит вызывать функцию extract() с ненадёжными данными наподобие пользовательского ввода (например, с суперглобальными переменными $_GET, $_FILES). Когда это всё-таки делают, проверяют, что значение параметра flags задано неперезаписывающим флагом наподобие EXTR_SKIP, и помнят, что переменные нужно извлекать в том же порядке, который определён в директиве variables_order файла php.ini.

Смотрите также

  • compact() - Создаёт массив, содержащий названия переменных и их значения
  • list() - Присваивает переменным значения похожим на массивы синтаксисом
To Top