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. Переменная не импортируется в текущую таблицу символов, если после добавления префикса формируется недопустимое название переменной. Префикс объединяется с ключом массива через символ подчеркивания: 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.

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

  • compact() - Создаёт массив с названиями и значениями переменных
  • list() - Присваивает переменным значения как массиву