数组函数

PHP extract() 函数

主题:PHP 数组参考上一页|下一页

说明

extract() 函数将变量从数组中导入到当前符号表中。

该函数基本上从关联数组中创建变量。 这通常通过使用数组键作为变量名并将它们的对应值作为变量值来完成。

下表总结了该函数的技术细节。

返回值: 返回成功导入符号表的变量数。
版本: PHP 4+

语法

extract() 函数的基本语法如下:

extract(array, flags, prefix)

下面的例子展示了 extract() 函数的作用。

<?php
// 样本关联数组
$array = array("brand"=>"Porsche", "model"=>"911", "color"=>"blue");

// 提取变量
extract($array);
echo "Brand: $brand, Model: $model, Color: $color";
?>

提示:如果现有变量与关联数组中的某个键同名,则会发生冲突,并且提取的变量会覆盖现有变量。 此外,如果关联数组中的任何键不是有效的变量名,则不会提取它。 但是,可以通过设置 flagsprefix 参数来更改此函数的默认行为。

警告:不要对不受信任的数据使用 extract() 函数,例如通过 Web 表单接收的用户输入(例如 $_GET、< code>$_FILES),因为它会带来潜在的安全风险。


参数

extract() 函数接受以下参数。

参数 说明
array 必填。 指定要使用的数组。
flags

可选。 指定如何处理无效或数字键和冲突。

此参数可以采用以下值之一:

  • EXTR_OVERWRITE - 发生冲突时,覆盖现有变量。
  • EXTR_SKIP - 发生冲突时,不要覆盖现有变量。
  • EXTR_PREFIX_SAME - 发生冲突时,在变量名前加上前缀。
  • EXTR_PREFIX_ALL - 为所有变量名加上前缀。
  • EXTR_PREFIX_INVALID - 仅在无效或数字变量名称前加上前缀。
  • EXTR_IF_EXISTS - 如果变量已经存在,则只覆盖它,否则什么也不做。
  • EXTR_PREFIX_IF_EXISTS - 如果相同变量的无前缀版本已经存在,则仅创建带前缀的变量名称。
  • EXTR_REFS - 提取变量作为引用而不是副本。这意味着导入变量的值仍然引用 array 参数的值。

如果不指定此参数,则假定为EXTR_OVERWRITE

prefix

可选。 指定前缀字符串。 前缀通过下划线 (_) 自动与数组键分开。 如果前缀结果不是有效的变量名,则不提取。

仅当 flags 设置为以下任何值时才需要此参数 EXTR_PREFIX_SAMEEXTR_PREFIX_ALLEXTR_PREFIX_INVALIDEXTR_PREFIX_IF_EXISTS.

更多示例

这里有更多示例显示 extract() 函数的基本工作原理:

以下示例展示了如何防止发生冲突时覆盖现有变量。

<?php
// 变量名与数组键名相同
$color = "red";

// 样本关联数组
$array = array("brand"=>"Porsche", "model"=>"911", "color"=>"blue");

// 提取变量
extract($array, EXTR_PREFIX_SAME, "car");
echo "$brand, $model, $color, $car_color";
?>

以下示例通过跳过提取来防止在发生冲突时覆盖现有变量。

<?php
// 变量名与数组键名相同
$color = "red";

// 样本关联数组
$array = array("brand"=>"Porsche", "model"=>"911", "color"=>"blue");

// 提取变量
extract($array, EXTR_SKIP);
echo "$brand, $model, $color";
?>
Advertisements