首页 > 编程笔记 > PHP笔记 阅读:12

PHP extract()函数的用法(附带实例)

在 PHP 程序中,extract() 函数能够根据数组成员生成一系列的变量,默认情况下,成员的名称(键)作为变量名,成员的值作为变量的数据,函数会返回生成变量的数量。

extract() 函数的定义如下:
extract(array &$array[, int $flags = EXTR_OVERWRITE[, string $prefix = NULL]] ) : int

描述
EXTR_OVERWRITE 默认值。变量已存在时,使用新的数据覆盖。
EXTR_SKIP 如果有冲突,不覆盖已有的变量。
EXTR_PREFIX_SAME 如果有冲突,在变量名前加上前缀 $prefix。
EXTR_PREFIX_ALL 所有变量名加上前缀 $prefix。
EXTR_PREFIX_INVALID 仅在非法字符或数字的变量名前加上前缀 $prefix。
EXTR_IF_EXISTS 只从数组中提取已存在的变量,并将数组成员的数据赋值到已存在的变量中,其他成员不做处理。
EXTR_PREFIX_IF_EXISTS 与 EXTR_IF_EXISTS 功能相似,只是提取的成员数据不保存到已存在的变量中,而是保存到添加了 $prefix 前缀的变量中。
EXTR_REFS 提取的变量名按引用指向数组成员中的数据,也就是说,修改这些变量的数据时,数组成员的数据也会同步改变。可以使用 | 或 or 运算符与其他标识一起使用。

下面的代码演示了一个 extract() 的简单应用。
<?php
$arr = array("earth"=>"地球","mars"=>"火星","jupiter"=>"木星");
echo extract($arr),"<br>";
echo $mars;
?>
代码首先显示 3,表示生成了 3 个变量。然后显示了 $mars 变量的值“火星”。其他的两个变量分别是 $earth 和 $jupiter。

添加变量名前缀时,还会自动使用下画线(_)连接,下面的代码演示了添加变量名前缀的应用:
<?php
$arr = range(1,3);
extract($arr,EXTR_PREFIX_ALL,"var");
echo "{$var_0},{$var_1},{$var_2}";
?>
其中,$var_0、$var_1 和 $var_2 就是由 $arr 数组三个成员的数值索引添加var前缀的变量,它们的值分别是 1、2、3。

下面的代码演示了 EXTR_REFS 标识的应用:
<?php
$arr = array("earth"=>"地球","mars"=>"火星","jupiter"=>"木星");
extract($arr,EXTR_REFS);
print_r($arr);
echo "<br>";
$mars="红色星球";
print_r($arr);
?>
代码执行结果为:

Array ( [earth] => 地球 [mars] => 火星 [jupiter] => 木星 )
Array ( [earth] => 地球 [mars] => 红色星球 [jupiter] => 木星 )

可以看出,从数组提取的变量直接引用了数组成员的数据,修改变量的值时,实际就是在修改数组成员的数据。

相关文章