(PHP 4, PHP 5, PHP 7, PHP 8)
extract — Импортирует переменные массива в текущую таблицу символов
Функция импортирует переменные массива в текущую таблицу символов.
Функция проверяет каждый ключ массива и определяет, соответствует ли ключ допустимому названию переменной. Функция также проверит, возникают ли коллизии с переменными в текущей таблице символов.
array
Ассоциативный массив. Функция трактует ключи массива
как названия переменных, а значения — как значения
переменных. Для каждой пары «ключ — значение» создаётся
переменная в текущей таблице символов с учётом
флагов параметра flags
и значения префикса в параметре prefix.
Без флагов EXTR_PREFIX_ALL
или EXTR_PREFIX_INVALID функция работает
только с ассоциативными массивами;
индексный массив не даст результатов.
flags
Параметр flags определяет способ
трактовки недопустимых или числовых ключей и коллизий. Параметр
принимает следующие значения:
EXTR_OVERWRITEEXTR_SKIPEXTR_PREFIX_SAMEprefix.
EXTR_PREFIX_ALLprefix к названию каждой переменной.
EXTR_PREFIX_INVALIDprefix
только к недопустимым или числовым названиям переменных.
EXTR_IF_EXISTSEXTR_PREFIX_IF_EXISTSEXTR_REFSarray.
Флаг работает отдельно
или в комбинации с другими флагами
параметра flags при объединении через побитовое «ИЛИ».
Для параметра flags
значение по умолчанию равно EXTR_OVERWRITE.
prefix
Обратите внимание, параметр prefix
становится обязательным при установке для параметра flags
флагов EXTR_PREFIX_SAME,
EXTR_PREFIX_ALL,
EXTR_PREFIX_INVALID
или EXTR_PREFIX_IF_EXISTS.
Переменная не импортируется в текущую таблицу символов,
если после добавления префикса формируется
недопустимое название переменной. Префикс объединяется
с ключом массива через символ подчеркивания: prefix_key.
Функция возвращает количество переменных, которые успешно импортировала в таблицу символов.
Пример #1 Пример импорта переменных функцией extract()
<?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.