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() - Присваивает переменным значения как массиву