(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
/* Предположим, что переменная $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\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.