Home >php教程 >php手册 >php extract()函数把数据中变量转换成php变量

php extract()函数把数据中变量转换成php变量

WBOY
WBOYOriginal
2016-06-13 11:19:18899browse

PHP extract() 函数从数组中把变量导入到当前的符号表中。对于数组中的每个元素,键名用于变量名,键值用于变量值。第二个参数 type 用于指定当某个变量已经存在,而数组中又有同名元素时,extract() 函数如何对待这样的冲突。  

将变量从PHP数组导出注册为全局变量,实现键名当作变量名,值作为变量的值,如下

 代码如下 复制代码
$vars = array('var1'=>'1','var2'=>'2','var3'=>'3','var4'=>'4','var5'=>'5');

实现通过键名当作变量名的形式访问,如:$var1,$var2

第一种方案:采用PHP内置extract()函数,方法如下

 代码如下 复制代码
extract($vars);

第二种方案:采用foreach循环数组注册为全局变量,方法如下

 代码如下 复制代码
foreach($vars as $k=>$v){
    $GLOBALS[$k] = $v;
}

推荐采用第二种方案,因为extract()函数存在性能和安全问题。

extract() 函数说明

(PHP 3 >= 3.0.7, PHP 4, PHP 5)
extract -- 从数组中将变量导入到当前的符号表

 代码如下 复制代码

int extract ( array var_array [, int extract_type [, string prefix]] )

本函数用来将变量从数组中导入到当前的符号表中。接受结合数组 var_array 作为参数并将键名当作变量名,值作为变量的值。对每个键/值对都会在当前的符号表中建立变量,并受到 extract_type 和 prefix 参数的影响。

参考表

 

参数 描述
array 必需。规定要使用的输入。
extract_rules

可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中的变量名是否冲突。

对非法、数字和冲突的键名的处理将根据此参数决定。可以是以下值之一:

可能的值:

  • EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。
  • EXTR_SKIP - 如果有冲突,不覆盖已有的变量。(忽略数组中同名的元素)
  • EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 prefix。自 PHP 4.0.5 起,这也包括了对数字索引的处理。
  • EXTR_PREFIX_ALL - 给所有变量名加上前缀 prefix(第三个参数)。
  • EXTR_PREFIX_INVALID - 仅在非法或数字变量名前加上前缀 prefix。本标记是 PHP 4.0.5 新加的。
  • EXTR_IF_EXISTS - 仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。可以用在已经定义了一组合法的变量,然后要从一个数组例如 $_REQUEST 中提取值覆盖这些变量的场合。本标记是 PHP 4.2.0 新加的。
  • EXTR_PREFIX_IF_EXISTS - 仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。本标记是 PHP 4.2.0 新加的。
  • EXTR_REFS - 将变量作为引用提取。这有力地表明了导入的变量仍然引用了 var_array 参数的值。可以单独使用这个标志或者在 extract_type 中用 OR 与其它任何标志结合使用。本标记是 PHP 4.3.0 新加的。
prefix

可选。请注意 prefix 仅在 extract_type 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 时需要。如果附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。

前缀和数组键名之间会自动加上一个下划线。

 

使用全部参数:

 代码如下 复制代码

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn