(PHP 4, PHP 5, PHP 7, PHP 8)
extract — Импортирует переменные массива в текущую таблицу символов
Импортирует переменные массива в текущую таблицу символов.
Функция проверяет каждый ключ массива, чтобы увидеть, содержит ли он допустимое имя переменной. Будут также проверены совпадения (коллизии) с существующими переменными в таблице символов.
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
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.